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']

  

八、列表的切片

       冒号 : 操作符可以对列表执行切片操作。切片操作是利用冒号操作符进行取子集的过程。
       
       语法规则:
           列表名[start:stop:step]
           其中,stop值不被包含在内(即区间前闭后开)。而step默认为1,可以省略。
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来判断,比如先前讲授的字符串,还有后面的元祖、集合等。

       all()与any()函数用于逻辑值列表,all()判别列表所有值是否都为真,全真时返回True,否则返回False;any()用于判别只要任一元素为真,则返回True,否则返回False。
(值为假:NoneFalse)
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']

  

       在上面的代码中,list()函数将一个字符串分开成一个个字符(字母)。如果要把字符串切分成一个个单词,可以使用split()方法。
s='hello-world'
print(s.split('-'))   #['hello', 'world']

  

       方法join()的功能与split()方法的功能相反,它接收一个字符串列表,然后把所有元素拼接到一起作为字符串。join()是一个字符串方法,所以必须把join()放到定界符后面来调用,并且传递一个列表作为参数。
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中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象。

       可变数据类型,允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

       可变对象包括: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

  

原文地址:https://www.cnblogs.com/shixiaoxun/p/14365127.html