一个列表中可以存放不同类型的数据:
list1 = ['Google', 'Runoob', 1997, 2000];
#和创建字符串一样,在'='号前面写列表的名称,'='号后面['str',num,num]。
#列表也可以可以切片,和字符串的方法一样[][:][::]。
#切片中[]只有一个参数的填'-1'会返回/输出列表中最后一项。
#切片中[:][:]最后一位参数填'-1'会倒叙将列表中的每一项输出。[::-1]时第一个参数要比第二个参数大。
为列表增加一项:append()、insert()
list1=['baidu','huawei','ali'];
list1.append('jd');
# 将'jd'添加到列表list1的尾部。
# append()方法单次只添加单个元素,即使追加的是一个列表,也会当作单个元素添加进去。
# 和 extend() 方法有些不一样
a=[1,2,3]
b=[4,5,6]
a.append(b)
print(a)
# 输出结果↑→ [1,2,3,[4,5,6]]
list1=['baidu','huawei','ali'];
list1.insert(1,'tengxun');#修改()里第一个参数可以设置新字符被添加到的位置,会把原来在哪个位置的项挤到下一个位置。
print(list1);
#将'tengxun'添加到列表list1中下标为1的位置,并将原先在下标1位置的元素和后面的元素往后移一位。
#在()里添加的下标参数超出列表长度范围,便会默认添加到列表的尾部。
#最好不要频繁使用insert()添加‘项’,因为它会把从它添加项所在那个的位置之后的每一项全部往后面挤一位。
删除掉列表中的某一项:del、pop()、remove()
del:删除其中某一个,还可以直接把列表删掉。
list1=[1,3,5,7,9,5];
print("没有删除之前:"+str(list1));
del list1[0];#用del删除列表中的第一项。
print("删除之后:"+str(list1));
# 也可以用来删除一个变量。
pop():根据下标删除。有返回值。会将删除的元素返回return。
list1=[1,3,5,7,9,5];
list1.pop(2);
print("pop(2)下标 删除之后:"+str(list1));
list1.pop(2);
print("pop(2)下标 删除之后:"+str(list1));
list1.pop(2);
print("pop(2)下标 删除之后:"+str(list1));
#不写pop()括号里面的下标会默认删除列表中最后一项。
#pop()相当于从列表中拿出某一项,因为它会返回删除的内容。
p=list1.pop(1);#‘1’是下标。
print(p);#会输出删除的内容。
remove():根据()里填的是内容,就去删列表中对应的内容,从左往右删,一次只删一个。没有返回值。
list1=[1,3,5,7,9,5];
list1.remove(5);#删除列表list1中从左往右的第一个5;
print("remove(5) 删除之后:"+str(list1));
list1.remove(5);#再次删除列表list1中从左往右第一个5;
print("remove(5) 删除之后:"+str(list1));
list1.remove(1);
print("remove(1) 删除之后:"+str(list1));
# 不会将删除的元素返回。
extend():将两个列表拼接在一起;用'+'号也可以将两个列表拼接在一起。
list1=[1,3,5,7,9,5]
list2=[2,4,6,8,10]
list1.extend(list2);# 将两个列表拼接在一起,新的字符串中:list1在前,list2在后。
# 上面的结果↑→ # [1,3,5,7,9,5,2,4,6,8,10]
print(list1)
print(list1+list2) #将 两个列表拼接在一起。
# extend() 方法不能将列表和单个元素做操作。不能将当个元素与列表合并,但是append()函数就可以向列表追加单个元素。
# extend()相当于列表连接列表。
修改列表中的内容:
list1=[1,3,5,7,9,5];
list1[0]='11dd';#'='号 重新赋值。
print(list1);
#将列表中的第一项修改为'lldd'
len():查看列表中元素的个数;查看列表的长度。
list1=[1,2,3,4,3,2,1,0];
print(len(list1));
3 in [1,2,3]:查看3是否存在于列表中,返回True或False。
for x in [1,2,3]: 迭代,和遍历差不多。
max():返回列表元素中的最大值,列表中的数据类型需要相同。
a=[1,1,1,2,2,3,3,4,5]
print(max(a)) # 输出a列表中最大的值
print(max(a,key=a.count)) # key是设置以什么去比较最大的,这里是统计a列表中出现次数最多的元素。
# max() 中的key参数还有很多用法,可以自行百度。
min():返回列表元素中的最小值,列表中的数据类型需要相同。
index():通过输入()里的内容来查找列表里所对应()里的内容并返回其下标,如果没找到就会抛异常。
print(list1.index(3));
嵌套列表:
list3=[[1,2,3],['a','b','c'],5,6,'d',True];#这是一个嵌套列表。
print(list3[0][1]);#输出list3列表内下标为'0'的子列表中内的下标为'1'的字符。
list():将元组转换成列表。
print(list(('1','3',33,ffe'')));
#用()小括号括起来的是元组。
reverse():反向列表中的元素;将列表中的内容从后往前输出,默认是从前往后输出。
sort()和reverse()都会将列表内部的结构改变。
list1=[1,2,3,4,5];
list1,reverse();
print(list1);
#将列表内内容的顺序由从前往后转为从后往前。
#输出:5,4,3,2,1
sort():将列表内容进行排序;()小括号里放的是就照什么样的模式进行排序,可以放一个function,按照你写的function来对列表进行排序。
list1=[1,2,3,4,5,6];
list1.sort();#()里不写函数,默认从小到大排序(升序)。
list1.sort(reverse=True);# 降序排序
lis.sort(key=lambda x:x[1])# 指定key自定义排序
clear():清除列表中的内容。
list1=[1,2,3,4,5,6];
list1.clear();
>>>[]
copy():复制列表;修改拷贝后的副本,原列表不会被修改。
list1=[1,2,3,4,5,6];
list2=list1.copy();
list2[1]='new';
#修改副本list2,原列表list1不会被修改。
list1=[1,2,3,4,5,6];
list2=list1;
list2[1]='new';
#用‘=’号复制的,修改副本list2,原列表list1之中的内容也会被修改,
#等号拷贝相当于将等号前的名重新指向另一个内容,如果指向的是变量名,那么将与变量名使用同一块内存。
list1=[1,2,3,4,5];
list2=list1[:];
list2[1]='new';
#用[:]切片拷贝list1;list2中的内容被修改,list1中的内容不会被修改。
#将[:]复制与用‘=’等号复制但是没有用到切片的复制方式区分开。
#切片copy是把list1的内容拿出来,赋给list2。
eval():将元组、字典、列表类型的字符串转为元组、字典、列表。
nums='1,2,3,4,5';
nums=eval(nums);
print(nums);#默认将字符串转为元组类型;
print(type(nums));#查看nums的数据类型。
nums='[1,2,3,4,5]';
nums=eval(nums);
print(nums);#因为字符串的两边带有[],所以会将此字符串转换成列表类型。
print(type(nums));#查看nums的数据类型。
a='[[1,2],[3,4],[5,6],[7,8],[9,0]]';
l=list(a); #list()会将里面的一切内容作为单个字符按原顺序,以逗号隔开,放在一个列表里;适合转化没有符号分隔的字符串。
v=eval(a); #eval()会根据原先字符串的格式来对转换进行调整。
print(type(l));
print(l);
print(type(v));
print(v);
#看使用list()转换str和使用eval()转换str的区别。
a={'a':'A','b':'B'};
s=str(a);#str(),转为字符串;
print(type(s));
print(s);
#将字典类型转换为字符串类型;
a=eval(s);#eval(),转为字典。
print(type(a));
print(a);
#再将字符串类型转换成元组类型。
a='([1,2],[3,4],[5,6],[7,8],(9,0))';
print(type(a));
b=eval(a);
print(type(b));
print(b);
#因为字符串a里面是()括起来的,所以会将字符串a转换成元组类型。
split():以某个字符来分割一串字符串,并以列表的形式返回结果。
i="1,2,3,4,5".split(',')
print(i)
["1","2","3","4","5"]
练习1:创建两个列表,一个存姓名,一个存手机号:(用到循环和列表):
=====通讯录管理系统=====
1、添加姓名和手机号
2、删除姓名
3、修改手机号
4、查询所有用户
5、根据姓名查找手机号
6、退出
===================
flag=True;
names=[];
phones=[];
while flag:
print('=====通讯录管理系统=====');
print('1、添加i姓名和手机号');
print('2、删除姓名');
print('3、修改手机号');
print('4、查询所有用户');
print('5、根据姓名查找手机号');
print('6、退出');
print('========================');
i=int(input('请选择:'));
if i==6:
flag=False;
elif i==1:
names.append(input('请输入姓名:'));
phones.append(input('请输入手机号:'));
elif i==4:
print('姓名:',names,'手机号:',phones);
#剩下没有上面编写的,请自己编写练习。
练习2:定义一个列表,让用户动态输入5个值,遍历输出列表的值。
nums=[];
for i in range(5):
nums.append(input());
else:
print('输入完毕!');
print(nums);
练习3:随机生成6位验证码
import random
# for i in range(1000000):
# a=random.randint(97,122)
# a=chr(a)
# if a not in "abcdefghijklmnopqrstuvwxyz":
# print(a,ord(a)) # ord()函数,将小写字母与ASCII表中小写字母对应的数字输出。
# for i in "abcdefghijklmnopqrstuvwxyz":
# print(i,ord(i))
# 生成6位随机数
x=list()
for i in range(6):
u=random.randint(1,3) # 随机取大小写字母与数字
if u==1:
# 大写字母
v=random.randint(65,90) # 包含65和90,与randrange()不同。
x.append(chr(v))
elif u==2:
# 小写字母
v=random.randint(97,122) # 包含前一位与后一位参数,与range()不同。
x.append(chr(v)) # chr()函数,将数字转换为ASCII表中对应的的字符。与ord()相反。
elif u==3:
# 数字
v=random.randint(0,9)
x.append(v)
x="".join(x) # 将列表拼接成字符串
print(x)