Day-7 列表和列表的推导式

01.列表相关的运算符

1.数学运算符:+、*

列表1+列表2 - 将两个列表中的元素合并产生一个新的列表

list1=[100,200,300]
list2=[10,20]
print(list1+list2)        #[100,200,300,10,20]

列表*N - 列表中的元素重复N次产生一个新的列表

print(list2*3)      #[10,20,10,20,10,20]
print(list2*1)       #[10,20]

比较运算符:>、<、>=、<=、==、!=**

补充:不同的类型可以用==和!=来比较是否相等,但是不能使用>、<、>=、<=来比较大小

#1)==、!=

print([10,20,30]==[10,20,30])   #True
print([10,20,30]==[10,30,20])   #False  (列表有序)
print({10,20,30}=={10,20,30})   #True   (集合无序)

#2)>、<、>=、<=
两个列表比较大小,比较的是第一对儿不相等的元素的大小

print([10,100,200,300]>[20,1])					#False
print([10,100,200,300]>[10,20,1000000,800])		#True
print([10,20,30]>[10,20])						#True

02.列表的相关函数

1.max、min
max(序列) - 获取序列中的最大元素
min(序列) - 获取序列中的最小元素

nums=[10,29,78,34,56,5,72]
print(max(nums))
print(min(nums))

2.sum
sum(数字序列) - 求序列中所有元素的和

nums=[10,29,78,34,56,5,72]
print(sum(nums))			#284
print(sum(range(101)))		#5050

3.sorted
sorted(序列) - 将序列中的元素从小到大排序、产生一个新的列表
sorted(序列,reverse=True) - 将序列中的元素从大到小排序、产生一个新的列表

nums=[10,29,78,34,56,5,72]
new_nums=sorted(nums)
print(new_nums)     #[5, 10, 29, 34, 56, 72, 78]

nums=[10,29,78,34,56,5,72]
new_nums=sorted(nums,reverse=True)
print(new_nums)     #[78, 72, 56, 34, 29, 10, 5]

4.len
len(序列) - 获取序列中元素的个数

print(len([10,20,30]))      #3
print(len(['abc123']))      #1
print(len(range(5,100)))    #95

5.list
list(序列) - 将序列的元素作为列表的元素创建一个新的列表

print(list('abc'))          #['a', 'b', 'c']
print(list(range(3)))       #[0, 1, 2]

03.列表的相关方法

1.列表.clear() - 清空列表

nums=[1,56,565,459,3]
nums.clear()
print(nums)     #[]

2.列表.copy() - 复制列表产生一个一模一样的新列表
列表.copy()-浅拷贝
列表[:]、列表*1、列表+[] 都是浅拷贝

nums=[1,56,565,459,3]
new_nums1=nums.copy()
print(new_nums1) #[1,56,565,459,3]

#变量在保存数据的时候保存的其实是数据在内存中的地址(python中的变量全是指针变量)
#一个变量直接给另外一个变量赋值,赋的是地址

new_nums2=nums
print(new_nums2)

print('nums的id',id(nums))               #nums的id 2370805777024
print('new_nums1的id',id(new_nums1))     #new_nums1的id 2370805444288
print('new_nums2的id',id(new_nums2))     #new_nums2的id 2370805777024

nums.append(100)
print(new_nums1)                        #[1, 56, 565, 459, 3]
print(new_nums2)                        #[1, 56, 565, 459, 3, 100]

3.列表.count(元素) - 统计列表中指定元素的个数

nums=[10,20,34,89,10,34,80,10]
print(nums.count(10))

c1=nums.count(5)
print(c1)           #0

4.列表.extend(序列) - 将序列中的元素全部添加到列表中

nums=[100,200]

nums.extend([10,20])
print(nums)     #[100, 200, 10, 20]

nums.extend('abc')
print(nums)     #[100, 200, 10, 20, 'a', 'b', 'c']

5.列表.index(元素) - 获取元素在列表中的下标值(0开始的下标值)
如果元素有多个,返回第一个的下标;如果元素不存在会报错

nums=[10,20,34,89,10,34,80,10]
result=nums.index(20)
print(result)   #1

result=nums.index(89)
print(result)   #3

result=nums.index(10)
print(result)   #0

'''
result=nums.index(100)
print(result)   #报错:ValueError: 100 is not in list
'''

6.列表.reverse() - 列表逆序

nums=[10,28,90,67,20]
nums.reverse()
print(nums)                 #[20, 67, 90, 28, 10]

nums=[10,28,90,67,20]
result=nums[::-1]
print(result)               #[20, 67, 90, 28, 10]

7.排序
列表.sort()/列表.sort(reverse=True)
sorted(序列)/sorted(序列,reverse=True)

nums=[10,28,90,67,20]
result=sorted(nums)
print(nums)     #[10, 28, 90, 67, 20]
print(result)   #[10, 20, 28, 67, 90]

nums=[10,28,90,67,20]
result=nums.sort()
print(nums)     #[[10, 20, 28, 67, 90]
print(result)   #None

04.列表推导式

列表推导式 - 快速创建列表的格式

1.推导式结构1

[表达式 for 变量 in 序列] - 让变量取序列中取值,一个一个的取,取完为止,每取一个值就将表达式的值作为列表的一个元素

list1=[10 for x in 'abc']
print(list1)        #[10, 10, 10]

list2=[x*2for x in range(5,11) ]
print(list2)        #[10, 12, 14, 16, 18, 20]

练习: 使用列表推导式获取nums中所有元素的个位数
#[3, 9, 0, 6, 1, 2]
**

nums = [23, 89, 90, 56, 41, 802]
list1=[x%10 for x in nums]
print(list1)

练习2:是用列表推导式将nums中所有的元素乘以10
[230, 890, 900, 560, 410, 8020]

nums = [23, 89, 90, 56, 41, 802]
list1=[x*10 for x in nums]
print(list1)

练习3:已知分数列表,将列表中的元素全部换成’及格’ - True 或者’不及格’-False
[‘及格’, ‘及格’, ‘不及格’, ‘及格’, ‘不及格’, ‘及格’]
[True, True, False, True, False, True]

scores = [90, 78, 45, 67, 39, 89]
list1=[x>=60 for x in scores]
print(list1)

result=['及格'if x>=60 else '不及格' for x in scores]
print(result)

练习4:已知一个数字列表,将列表中所有的偶数除以2,所有的奇数乘以2
[46, 178, 45, 28, 82, 401]

nums = [23, 89, 90, 56, 41, 802]
result=[int(x/2) if x%2==0 else x*2 for x in nums]
print(result)

2.推导式结构2

[表达式 for 变量 in 序列 if 条件语句]
创建一个列表、变量去序列中取值,一个一个的取,取完为止,每取一个值就判断条件语句是否为True。如果为True就计算表达式的结果为列表的元素;不是就继续取下一个

result=[x for x in range(10,21)if x%2]
print(result)   #[11, 13, 15, 17, 19]

练习1:使用列表推导式提取nums中所有的奇数
#[23, 89, 41]

nums = [23, 89, 90, 56, 41, 802]
result=[x for x in nums if x%2]
print(result)   #[23, 89, 41]

练习2:已知一个列表,提取列表中所有的字符串

list1 = [10, 23.9, 'hello', True, '12', 0]
result=[x for x in list1 if type(x)==str]
print(result)

练习3:已知一个列表,提取列表中所有的整数,并且将整数加3
#[13, 3]

list1 = [10, 23.9, 'hello', True, '12', 0]
result=[x+3 for x in list1 if type(x) ==int]
print(result)

05.补充三目运算符

C和Java:
表达式?值1:值2 -如果表达式的值为真结果就是值1,否则结果是值2

python:
值1 if 表达式 else 值2 -如果表达式的值为True结果就是值1,否则结果是值2

age=8
result='成年' if age>=18 else '未成年'
print(result)

06.元祖

元祖是不可变的列表
查、in和not in 、数学运算、比较运算、相关函数 - 元祖都支持

1.什么是元祖(tuple)

(元素1,元素2,元素3,…)
不可变的;有序

空元祖

t1=()
print(t1,type(t1))      #() <class 'tuple'>

有一个元素的元祖

t2=(10,)
print(t2,type(t2))      #(10,) <class 'tuple'>

t3=(12,56,78,96,42,36,72)
print(t3[1])        #56
print(t3[-1])       #72
print(t3[-3:])      #(42, 36, 72)
上一篇:MySQL 如何查找删除重复行?


下一篇:Mysql+Idea图书管理系统(项目链接+项目感悟)