python 中的列表

列表是可变数据类型  可以改变元素的值,可以保存任何数据类型--数据项不需要具有相同的类型

创建 [ ] 

list1 =[1,2,3,4,5]

访问数据项:索引和分片的方式,

list1 = ['physics', 'chemistry', 1997, 2000]
print list1[0]  #通过索引取第一位
print list1[-1] #通过索引访问最后一位
print list1[0:2]  #通过分片的方式访问
更新数据项:通过索引和分片赋值的方式(不能超过索引范围)  可以同时改变一个范围内的数据项

list1[x:y] = list2    *list2替换后总长度可以和list1不相等   批量追加

list1 = ['physics', 'chemistry', 1997, 2000]
list2 = [2008,2018]
list1[2]='chinese' #索引赋值
list1[3:3]=list2   #分片赋值,在第四项插入列表list2
print list1     #输出 ['physics', 'chemistry', 'chinese', 2008, 2018, 2000]

清空列表:   list[:] = []

list1 = ['physics', 'chemistry', 1997, 2000]
list1[:]=[]
print list1   #输出 []

删除数据项    del list[index]      del list 不加索引直接删除引用,回收对象

list1 = ['physics', 'chemistry', 1997, 2000]
del list1[2]
print list1   #输出 ['physics', 'chemistry', 2000]

  列表方法:

append  用于在列表末尾追加新的元素 
count   用于统计某个元素在列表中出现的次数
extend  在列表末尾一次性追加另一个序列中的多个值
insert(index, obj) 将对象插入到列表指定项
index   用于从列表中找出某个值第一个匹配项的索引位置
pop     该方法从列表中弹出一个元素,默认是最后一个。并且返回弹出的元素

remove  从列表中移除某个值的第一个匹配项。与pop不同的是,该方法并不返回移除的元素

下面是举例说明:

list1 = ['physics', 'chemistry', 1997, 2000,'shanghai','shanghai'] 
list1.append(['beijing',100,2018])   #相当于在最后一位追加了一个列表
print list1   #结果是:['physics', 'chemistry', 1997, 2000, 'shanghai', 'shanghai', ['beijing', 100, 2018]]
list1.extend(['beijing',100,2018])   #列表的扩容,列表的一次性追加,相当于加了三个数值, 如图所示后面三个元素
print list1.count('shanghai')  #统计字符串shanghai在列表中出现的次数,返回值是 2
print list1 #输出:  'physics', 'chemistry', 1997, 2000, 'shanghai', 'shanghai',  'beijing', 100, 2018]
list1.insert(0,'def')  #insert函数 给指定的位置插入数据,给第一位插入def,其他的自动往后排
print list1.index('def')  #指定元素的索引位置,第一个字符串def出现的索引位置
print list1.pop() #不填,不输入任何参数,默认弹出最后的那位 ,主要而且还弹回返回值
list1.pop(2)  #pop是按照索引弹出指定的数据,主要是有返回值的
list1.remove(3)  #移除数字3,
list1.reverse()  #列表翻转,比较常用  [1,2,3,4]  可以翻转成 [4,3,2,1]

注意两个操作:原地操作和新建操作

list1.pop()    #该方法属于原地操作,函数直接操作数据本身,本身的值已经变了,函数是否有返回值,

#新建操作:数据本身对函数不做任何操作,直接返回的是一个新数据  a.replace是新建了一个数据,

sort和sorted两个函数都是排序的两个函数

list2 = [4,5,1,3,2]
list2.sort()  #默认按升序排列,acii码的升序值排列  

输出:[1, 2, 3, 4, 5]

#sorted() #系统的内键函数,原地排序
print sorted(list2) #直接返回结果 
举例说明: 
str_list= ['c', 'c#', 'java', 'python', 'ruby', 'javascript']
str_list.sort() #升序
str_list.sort(reverse=True)  #降序,翻转函数,不填,默认true,
str_list.sort(key=len,reverse=True)   #按照长度排,长的在后面,短的在前面,len是系统的函数,都调用len规则,
print sorted(str_list,key=len, reverse=True)  #原地排序,是有返回值的,sort里面是None
#key后面是个函数,函数里面定义了排序规则,可以自定义函数,也可以系统函数

返回结果:

['javascript', 'python', 'ruby', 'java', 'c#', 'c'] 

sort函数:  用于在原位置度列表进行排序。 在原位置意味着列表会被修改

注意:sort()方法的返回值并不是序列本身,而是None

sort() 默认reverse=False

如何保存原序列顺序而进行排序    1.拷贝后再排序     2.函数:sorted(list)
sorted函数:语法 sorted(iterable[,cmp,[,key[,reverse=True]]])
第一个参数是一个iterable,序列元素都可以
key指定一个接收一个参数的函数,这个函数用于从每个元素中提取一个用于比较的关键字。默认为None
reverse是一个布尔值。如果设置为True,列表元素将被倒序排列
返回值是一个对iterable中元素进行排序后的列表(list)
如何改排序规则  :key和reverse参数的使用  :key = 排序规则函数名
reverse 默认为False--按照ASCII码的升序排列,reverse=True降序
list=[[1, 'zhangsan', 3000], [2, 'lisi', 2500], [3, 'tiantian', 20000]]
#按照用一行代码输出工资最大的那个姓名
# def my_sort(a):
#     return a[-1]
# lambda 匿名函数 
list.sort(reverse=True,key=lambda a:a[-1])
print list[0][1]
print sorted(list,key=lambda x:x[-1],reverse=True)[0][1]

补充,匿名函数的使用,lambda,: 前面是参数,后面是方法,

练习题:

2.接收用户输入的数字,输入负数时结束输入。存入一个列表,然后找出用户所输入的所有数字中最大的数,最小的数,再将所有数字从小到大排序输出

list1 = []
while True:
    num = input('请输入一个数字:')
    if num>=0:
        list1.append(num)
    else:
        break
print max(list1),min(list1),sorted(list1)

练习题:

#请用代码实现:利用下划线将列表的每一个元素拼接成字符串,li = ['zhangsan', 'lisi', 'wangwu']
#改变后 newli = ['zhangsan_lisi_wangww','zhangsan_lisi_wangww','zhangsan_lisi_wangww']
li= ['zhangsan', 'lisi', 'wangwu']
en ='_'.join(li)
print en
for i in range(len(li)):
    li[i]=en
print li

输出:

zhangsan_lisi_wangwu

['zhangsan_lisi_wangwu', 'zhangsan_lisi_wangwu', 'zhangsan_lisi_wangwu']

python特有的:迭代

for x in list: print x
for x in range(len(list)):
print x

[x for x in list] --迭代后自动装填成新列表

a=[1, 2, 3, 4, 5, 6] 一行代码实现对a中的元素进行乘以2次方后,组成的新列表

传统的方法:

a =[1,2,3,4,5,6]
new =[]
for x in a:
    new.append(x**2)
print new

一行代码实现的:

a =[1,2,3,4,5,6]
print [i**2 for i in a]

x=[1,2,3,9,10,8,6,7]
print [a+2 for a in x if a%2==0] #列表的推倒式,对偶数进行加2
#a=[1, 2, 3, 4, 5, 6] 偶数+3组成一个新的列表
a=[1, 2, 3, 4, 5, 6]
print [b+3 for b in a if b%2==0]

#一行代码输出,一个新列表:是两个list中的偶数分别相加,应该结果是[2+6,4+6,2+8,4+8]
x=[1,2,3,4]
y=[5,6,7,8]
print [a+b for a in x for b in y if a%2==0 and b%2==0]

列表的运算 +  * 

+  生成了一个新的列表存这两个列表的和

+= 效果与extend()一样,向原列表追加一个新元素,在原有列表上增加

a=[1, 2, 3, 4, 5, 6]
b =[9,8]
print a+b   #  [1, 2, 3, 4, 5, 6, 9, 8]
print a*3   #    [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

zip函数:合并函数,用zip函数组合输出,[(1, 'z', 100), (2, 'w', 300), (3, 'l', 900)]

map函数,比zip函数高级一点,如果没有数值就会自动填充为None

a =[1,2,3,4]
b =['z','w','l']
c =[100,300,900]
print zip(a,b,c)  #zip函数自动过滤掉多余的项
print map(None,a,b,c)  #zip函数自动填充为none
类型转换   其他对象转列表    list(str)      eval(str)
列表转字符串     ''.join(list)      str(list) 

列表转元祖        tuple(list)

str1 = 'hello world'
print list(str1)  #字符串转列表
b =['z','w','l']
print ''.join(b)  #列表转字符串
print tuple(b)   #列表转元组

猜你喜欢

转载自blog.csdn.net/xxlovesht/article/details/80423372
今日推荐