一、列表生成式 推导式 -->创建列表的一种字面量语法
#comprehension
a = [x for x in range(1,101)]
b = [x for x in range(2,101,2)]
c = [x for x in range(1,101) if x %3 ==0 or x % 5 == 0]
d = [x<<1 for x in range(1,11)]
print(c)
print(d)
应用
1. 序列变换成列表
str1 = 'abc'
list1 = [x for x in str1]
print(list1)
2 .筛选(提取出有效的或者删除无效)
scores = [89, 8, 100, 98, 67, 34, 59, 45, 23, 78, 92]
new_scores = [x for x in scores if x >= 60]
print(new_scores)
3 .不统一的变换
if后面的条件成立就执行if前面的语句,否则就执行else里面的语句
list4 = [19, 'abc', '98', 'mnb', 13, 53]
new_list4 = [x * 10 if type(x) == int else x for x in list4]
#如果返回类型是整型,就对遍历的元素进行x*10 操作,不成立,遍历直接过
#不统一的变换与筛选的区别就是,不统一的变换是不会删除掉原列表里的元素的
print(new_list4)
二、列表的加法和乘法
1. 列表1 + 列表2 – 合并两个列表产生一个新的列表
a = [1, 2, 3]
b = ['后裔', '鲁班七号']
print(a + b) # [1, 2, 3, '后裔', '鲁班七号']
2. 列表 * N – 列表中的元素重复N次产生一个新的列表
print(a * 5) # [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
3. 比较运算
- 比较相等:== !=
a.两列表相等,元素个数,大小,顺序都相等
b.两个不同类型的数据可以判断是否相等, 结果一定是False
c. is的用法print([1, 2] == 'abc') # False print([1, 2] == '[1,2]') # False print('is:',2 is 2, 2==2) # True print('is:', 'you' is 'you') # True print('is:', [1, 2] is [1, 2], [1, 2] == [1, 2]) # False True
-
为什么2 is 2为true 列表 is列表是false
2 is 2 里的两个2 指的是同一个存储空间里的2,不可变数据都是如此;列表可变,即使列表长得一样但是存储位置是不同的
is 是判断是否是’本人’
== 是判断这两个人长得是不是一模一样
#如果是
list1=[1, 2]
list2=[1, 2]
list1=list2
print(list1 is list2) # True
-
用数据给变量赋值的时候,如果数据是不可变的,那么会复用前面存储的值
-
如果数据可变,不管之前有没有存储过,都会重新开辟新的内容空间
-
id(变量) -获取变量中保存的数据在内容空间中的地址
-
数字、元组不可变 列表可变
-
用一个变量给另外一个变量赋值,其实是让新的变量保存原变量中的数据的地址(不会开辟新的空间保存数据)
a = [10, 20] b = a print(id(a), id(b)) # 2061876680448 2061876680448 #(不同计算机返回地址肯定是不同的,这里别抄俺的答案)
-
python里的所有变量都是指针变量,变量存的是数据在内存中存储的地址
三、列表相关函数
1.相关函数
max、min、sum、sorted、len、list
1)max 和 min
max(序列)–返回序列中元素的最大值
min(序列) – 返回序列中元素的最小值
nums = [90, 89, 67, 29, 789, 2]
print(max(nums))
print(min(nums))
2) sum 序列 - 求序列中所有元素的和
只能是数字数据
nums = [90, 89, 67, 29, 789, 2]
print(sum(nums))
print(sum(range(101)))
3) sorted
-
sorted(序列) --将序列中的元素从小到大排序(升序),以列表的形式返回排好序的新列表,可应用于任何可迭代的对象上
sorted(序列,reverse=True) --降序 -
列表.sort
在原始list上操作,不返回值
nums = [90, 89, 67, 29, 789, 2]
print(sorted(nums))# [2, 29, 67, 89, 90, 789]
print(nums.sort()) # None
4)list(序列)-- 将其他的数据序列转换成列表(任何序列都可以)
list1 = list('abc') # ['a', 'b', 'c']
print(list1)
list2= list(range(10,15)) # [10, 11, 12, 13, 14]
print(list2)
四、相关方法
列表.xxx()
1. 列表.clear() -删除
nums=[1,34,32,13,45]
nums.clear()
nums=[1,34,32,13,45]
nums=[] #也可清空,效率不如clear
2. 列表.copy – 返回一个和原列表一样(长得一样的)新的列表
列表[:] 、列表+[]、列表*1 也可复制
nums2 = nums
# nums1 和 nums 地址是不同的,nums2和nums地址是一样的
song = ['身骑白马','关山酒','喜','喜']
song1=song+[]
print(song1)
3. 列表.count(元素) - 返回元素在列表中出现的次数
song = ['身骑白马','关山酒','喜','喜']
print(song.count('喜'))
4. 列表.extend(序列) - 将序列中的元素全部添加到列表中
song = ['身骑白马','关山酒','喜','喜']
song.extend(['典狱司','加州旅馆'])
print(song)
5. 列表.index(元素) - 返回元素在列表中的下标(这的下标是0开始的下标值)
song = ['身骑白马','关山酒','喜','喜']
print(song.index('喜')) #2 有重复的返回第一个元素的下标 # 没有的就报错
6. 列表.reverse() - 逆序
song = ['身骑白马','关山酒','喜','喜']
new_song = song[::-1]
print(new_song)
song.reverse()
print(song)
7. 列表.sort()
nums = [90, 89, 67, 29, 789, 2]
nums.sort()
print(nums)
nums = [90, 89, 67, 29, 789, 2]
new_nums = sorted(nums)
print(new_nums)