python数据类型(列表List2)
七、列表操作符
1.加号
加号+不仅能用于数字相加、字符连接,还能用于列表的拼接。
num1=[1,2,3] num2=[2,3,4] print(num1+num2) #[1,2,3,2,3,4]
num1+num2的结果是将列表num2中的元素拼接到列表num1的后面,生成了一个新的列表。
两个不同数据类型的列表也能拼接。
2.星(乘)号
星号“*”操作符可以将列表重复指定的次数。
names=['Jack','Rose','Alx'] print(names * 3) #['Jack', 'Rose', 'Alx', 'Jack', 'Rose', 'Alx', 'Jack', 'Rose', 'Alx']
八、列表的切片
letters=['a','b','c','d','e','f','g','h'] print(letters[0:4]) #['a','b','c','d'] print(letters[:4]) #['a','b','c','d'] print(letters[4:]) #['e','f','g','h'] print(letters[::2]) #['a','c','e','g']
步长还可以取负整数,代表逆序切片。
letters=['a','b','c','d','e','f','g','h'] print(letters[::-1]) #['h','g','f','e','d','c','b','a'] print(letters[::-2]) #['h','f','d','b']
print(letters[::-9] #['h']
注意:加:操作符是切片,切片的结果是列表,哪怕只有一个元素;不加:操作符是索引,索引的结果是元素本身。
letters=['a','b','c','d','e','f','g','h'] print(letters[-1]) #'h' print(letters[-1:]) #['h']
切片运算符放到赋值语句等号左边时可以对多个元素进行更新。
letters=['a','b','c','d','e','f','g','h'] letters[1:3]=['hello','world'] #['a','hello','world','d','e','f','g','h'] letters[:1]=['x','y'] #['x','y','hello','world','d','e','f','g','h'] letters[:6]='8' #['8','f','g','h']
九、列表常用函数和方法
1.排序
当把数值数据存储在列表后,一个常见的需求是对列表中的值进行排序,利用sort()方法可以实现。原列表被修改。
a = [3, 1, 2, 5, 4, 6] a.sort() print(a) #[1, 2, 3, 4, 5, 6]
使用sort()方法后,列表本身被改变了。如果不想改变原始列表,可以使用sorted()函数,并把结果赋值给新的变量。
nums = [-1, 34, 0.2, -4, 309] nums_desc = sorted(nums, reverse=True) #降序 print(nums) #[-1, 34, 0.2, -4, 309] print(nums_desc) #[309, 34, 0.2, -1, -4]
2.翻转
reverse()方法可以将列表按位置翻转。
nums=[1, 2, 2, 2, 3, 3, 4, 5] nums.reverse() print(nums) #[5, 4, 3, 3, 2, 2, 2, 1]
3.简单统计
min()与max()函数可以计算列表最小值与最大值。
nums=[33,2,-19,21,-5] print(min(nums)) #求最小值 print(max(nums)) #求最大值
如果要对出现相同元素计数,可以使用count()方法。
str1=['b','c','a','d','a','b','d','b'] print(count('b')) #3
sum()函数可以对数值列表求和。
nums=[1, 2, 2, 2, 3, 3, 4, 5] print(sum(nums)) #22
4.逻辑判断
如果需要查看列表中是否存在某个元素,可以使用关键字in,结果返回的是逻辑值。
nums=[33,2,-19,21,-5] print(21 in nums) #True print(3 in nums) #False
很多序列型数据类型都可以使用in来判断,比如先前讲授的字符串,还有后面的元祖、集合等。
conditions = [True, 0, None] print(all(conditions)) #False print(any(conditions)) #True
如果要比较两个列表是否一致,则可以直接使用两个等号进行逻辑判断。两个列表一致,不仅值要一样,而且顺序也要一样。
a = [1, 2, 3, 4] print(a == [1, 2, 3, 5]) # False print(a == [1, 3, 2, 4]) # False print(a == [1, 2, 3, 4]) # True
5.列表与字符串
字符串是一系列字符的序列,而列表是一系列值的序列,但一个由字符组成的列表是不同于字符串的。要把一个字符串转换成字符列表,可以用list()函数。
s='hello' print(list(s)) #['h', 'e', 'l', 'l', 'o']
s='hello-world' print(s.split('-')) #['hello', 'world']
s=['你','是','谁','?'] print(''.join(s)) #你是谁?
6.列表对象与值
逻辑关系==和is的区别
Python 里 "==" 是相等运算符,是用来判断两侧对象的值是否相等。 Python 会查找存储在内存中两个对象(数据), 并判断这两个数据是否相等。 "is"运算符称为同一性运算符,Python 会查找两个对象,查看它们是否指向内存中的同一对象,"is" 是判断引用的内存对象是否相同,而不是内存对象存储的数据。
简而言之:==表示值是否相等;is表示是否是同一个引用。
#不可变数据类型 str1='hello,world' str2='hello,world' print(str1==str2) #True print(str1 is str2) #True #可变数据类型 list1=[1,2,3] list2=[1,2,3] print(list1==list2) #True print(list1 is list2) #False
7.可变数据类型和不可变数据类型
python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。
可变对象包括:list,dict,set。不可变对象包括:tuple,string,int,float,bool。这也就是为什么可以通过函数来添加或删除 list, dict 中的元素,而 tuple 不能。虽然 tuple 和 list 形式类似。 另一点,如果你编写的函数引用了一个外部的 dict 数据,在函数内部修改了 dict 的数据,添加也好,删除也好,那么它的也会被更改。但是如果你用某种方式改变了 string , 则会在内存中创建一个新地址来存储这个新 string 对象。 不可变对象是用在不需要变化的地方,以免意外更改而产生意外。
# 字符串,不可变数据类型 s1 = 'hello world' s2 = 'hello world' print(id(s1), id(s2)) # 8638384 8638384 print(s1 == s2, s1 is s2) # True True # 列表 可变数据类型 l1 = [2, True, 3.14] l2 = [2, True, 3.14] print(id(l1), id(l2)) # 38330432 40629184 print(l1 == l2, l1 is l2) # True False