Python列表和元组

列表

定义:[ ] 内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素

再回顾下列表的特点:

1.可存放多个值

2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序

3.可修改指定索引位置对应的值,可变

列表的增加操作

 append追加

数据会追加到尾部

>>> names
['alex', 'jack']
>>> names.append("rain")
>>> names.append("eva")
>>> 
>>> names
['alex', 'jack', 'rain', 'eva']
insert插入

可插入任何位置,用法insert(索引,插入的内容)

>>> names.insert(2,"黑姑娘")
>>> names
['alex', 'jack', '黑姑娘', 'rain', 'eva']
extend合并

可以把另一外列表的值合并进来

>>> n2 = ["狗蛋","绿毛","鸡头"]
>>> names
['alex', 'jack', '黑姑娘', 'rain', 'eva']
>>> names.extend(n2)
>>> names
['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']
列表嵌套
>>> names.insert(2,[1,2,3])
>>> names 
['alex', 'jack', [1, 2, 3], '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']
>>> names[2][1]
2

删除操作

del删除

del通过列表的索引直接删除(从内存上删除)   用法: del  list[索引]

>>> names
['alex', 'jack', [1, 2, 3], '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']
>>> del names[2]
>>> names
['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']
注:如果删除的索引大于当前列表,会报错,错误语法为:
names=['金角大王Alex', 'Jack', 'Rain', '小明', 'Rachel', 'Mack', '小强']
del names[11]
print(names)

IndexError: list assignment index out of range
remove删除

通过列表的元素删除,如果列表有重复的值,默认删除第一个,无返回值,直接删除.如果元素不存在,会报错

names=['金角大王Alex', 'Jack', 'Rain', '小明', 'Rachel','小强',"Rain"]
names.remove("Rain")

print(names)

结果:
['金角大王Alex', 'Jack', '小明', 'Rachel', '小强', 'Rain']

如果要删除的元素不存在,报的错为:
ValueError: list.remove(x): x not in list
pop 删除

pop通过索引删除,如果不指定索引,默认是删除最后一个元素,有返回值,返回值是被pop掉的元素.

>>> names
['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']
>>> names.pop() #默认删除最后一个元素并返回被删除的值
'鸡头'
>>> names
['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛']
>>> help(names.pop)
>>> names.pop(1)  #删除指定元素
'jack'

pop的错误用法:

name = []
name.pop()
空列表如果用pop会报以下错误:
IndexError: pop from empty list

names=['金角大王Alex', 'Jack', 'Rain', '小明', 'Rachel','小强',"Rain"]
names.pop(22)
pop的索引如果不存在,也会报错
IndexError: pop index out of range
clear 清空
>>> n2
['狗蛋', '绿毛', '鸡头']
>>> n2.clear()
>>> n2
[]

用途:比如CS中,匪徒装的炸弹引爆,会清空所有人的生命

修改操作

>>> names
['alex', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛']
>>> names[0] = "金角大王"
>>> names[-1] = "银角大王"
>>> names
['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王']

查看操作

index 通过元素的值找索引,有返回值,返回的是元素所在列表的索引

count查找元素在列表中的个数,有返回值,返回的是该元素在列表中的个数

>>> names
['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']
>>> 
>>> names.index("eva") #返回从左开始匹配到的第一个eva的索引
3
>>> names.count("eva") #返回eva的个数
2

if 'eva' in names
>>> True

查看列表里面的元素也可以通过for循环遍历(重点)

>>> for i in names:  
...     print(i)
... 
黑姑娘
银角大王
金角大王
狗蛋
rain
eva
@
4
#

切片

切片就像切面包,可以同时取出元素的多个值

names[start:end]
>>> names
['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']
>>> names[1:4]  #不包含下标4的元素
['黑姑娘', 'rain', 'eva']

*切片的特性是顾头不顾尾,即start的元素会被包含,end-1是实际取出来的值

倒着切

>>> names[-5:-1]
['rain', 'eva', '狗蛋', '银角大王']

但其实我想要的是后5个,只打印了4个,’eva’这个值没出来,为什么,因为上面提到的顾头不顾尾

可是想把后5个全取出来如何做呢?

>>> names[-5:]
['rain', 'eva', '狗蛋', '银角大王', 'eva']

如果取前几个值 ,一样可以把:号左边的省掉

>>> names
['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']
>>> names[0:3]
['金角大王', '黑姑娘', 'rain']
>>> names[:3]  #跟上面一样的效果
['金角大王', '黑姑娘', 'rain']

 步长, 允许跳着取值

names[start:end:step] #step 默认是1

 

>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:7:2]  #设置步长为2
[0, 2, 4, 6]

 

>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> 
>>> a[::3] #按步长3打印列表,第1个:是省略掉的start:end
[0, 3, 6, 9]

列表反转

>>> a[::-1] #通过把步长设置成负值,可达到列表返转的效果
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 
>>> a[::-2]
[9, 7, 5, 3, 1]

排序&反转

排序

列表里都是数字类型,或者都是字符串类型可以使用sort()排序

>>> a = [83,4,2,4,6,19,33,21]
>>> a.sort()
>>> a
[2, 4, 4, 6, 19, 21, 33, 83]

下面的排序结果为何如何解释?

>>> names=['金角大王', 'rain', '@', '黑姑娘', '狗蛋', "4","#",'银角大王', 'eva']
>>> names.sort()
>>> names
['#', '4', '@', 'eva', 'rain', '狗蛋', '金角大王', '银角大王', '黑姑娘']

答案全在这张表上,虽然后面我们会讲,但现在先知道,排序的优化级规则是按这张表来的

反转 
>>> names
['#', '4', '@', 'eva', 'rain', '狗蛋', '金角大王', '银角大王', '黑姑娘']
>>> names.reverse()
>>> names
['黑姑娘', '银角大王', '金角大王', '狗蛋', 'rain', 'eva', '@', '4', '#']

练习

针对列表names=[‘金角大王’, ‘黑姑娘’, ‘rain’, ‘eva’, ‘狗蛋’, ‘银角大王’, ‘eva’,’鸡头’]进入以下操作

1.通过names.index()的方法返回第2个eva的索引值

2.把以上的列表通过切片的形式实现反转

3.打印列表中所有下标为奇数的值

4.通过names.index()方法找到第2个eva值 ,并将其改成EVA

列表的官方帮助文档

  1 Help on list object:
  2 
  3 class list(object)
  4  |  list(iterable=(), /)
  5  |  
  6  |  Built-in mutable sequence.
  7  |  
  8  |  If no argument is given, the constructor creates a new empty list.
  9  |  The argument must be an iterable if specified.
 10  |  
 11  |  Methods defined here:
 12  |  
 13  |  __add__(self, value, /)
 14  |      Return self+value.
 15  |  
 16  |  __contains__(self, key, /)
 17  |      Return key in self.
 18  |  
 19  |  __delitem__(self, key, /)
 20  |      Delete self[key].
 21  |  
 22  |  __eq__(self, value, /)
 23  |      Return self==value.
 24  |  
 25  |  __ge__(self, value, /)
 26  |      Return self>=value.
 27  |  
 28  |  __getattribute__(self, name, /)
 29  |      Return getattr(self, name).
 30  |  
 31  |  __getitem__(...)
 32  |      x.__getitem__(y) <==> x[y]
 33  |  
 34  |  __gt__(self, value, /)
 35  |      Return self>value.
 36  |  
 37  |  __iadd__(self, value, /)
 38  |      Implement self+=value.
 39  |  
 40  |  __imul__(self, value, /)
 41  |      Implement self*=value.
 42  |  
 43  |  __init__(self, /, *args, **kwargs)
 44  |      Initialize self.  See help(type(self)) for accurate signature.
 45  |  
 46  |  __iter__(self, /)
 47  |      Implement iter(self).
 48  |  
 49  |  __le__(self, value, /)
 50  |      Return self<=value.
 51  |  
 52  |  __len__(self, /)
 53  |      Return len(self).
 54  |  
 55  |  __lt__(self, value, /)
 56  |      Return self<value.
 57  |  
 58  |  __mul__(self, value, /)
 59  |      Return self*value.
 60  |  
 61  |  __ne__(self, value, /)
 62  |      Return self!=value.
 63  |  
 64  |  __repr__(self, /)
 65  |      Return repr(self).
 66  |  
 67  |  __reversed__(self, /)
 68  |      Return a reverse iterator over the list.
 69  |  
 70  |  __rmul__(self, value, /)
 71  |      Return value*self.
 72  |  
 73  |  __setitem__(self, key, value, /)
 74  |      Set self[key] to value.
 75  |  
 76  |  __sizeof__(self, /)
 77  |      Return the size of the list in memory, in bytes.
 78  |  
 79  |  append(self, object, /)
 80  |      Append object to the end of the list.
 81  |  
 82  |  clear(self, /)
 83  |      Remove all items from list.
 84  |  
 85  |  copy(self, /)
 86  |      Return a shallow copy of the list.
 87  |  
 88  |  count(self, value, /)
 89  |      Return number of occurrences of value.
 90  |  
 91  |  extend(self, iterable, /)
 92  |      Extend list by appending elements from the iterable.
 93  |  
 94  |  index(self, value, start=0, stop=9223372036854775807, /)
 95  |      Return first index of value.
 96  |      
 97  |      Raises ValueError if the value is not present.
 98  |  
 99  |  insert(self, index, object, /)
100  |      Insert object before index.
101  |  
102  |  pop(self, index=-1, /)
103  |      Remove and return item at index (default last).
104  |      
105  |      Raises IndexError if list is empty or index is out of range.
106  |  
107  |  remove(self, value, /)
108  |      Remove first occurrence of value.
109  |      
110  |      Raises ValueError if the value is not present.
111  |  
112  |  reverse(self, /)
113  |      Reverse *IN PLACE*.
114  |  
115  |  sort(self, /, *, key=None, reverse=False)
116  |      Stable sort *IN PLACE*.
117  |  
118  |  ----------------------------------------------------------------------
119  |  Static methods defined here:
120  |  
121  |  __new__(*args, **kwargs) from builtins.type
122  |      Create and return a new object.  See help(type) for accurate signature.
123  |  
124  |  ----------------------------------------------------------------------
125  |  Data and other attributes defined here:
126  |  
127  |  __hash__ = None
官方帮助文档
 1 """
 2 针对列表names=[‘金角大王’, ‘黑姑娘’, ‘rain’, ‘eva’, ‘狗蛋’, ‘银角大王’, ‘eva’,’鸡头’]进入以下操作
 3 
 4 
 5 通过names.index()的方法返回第2个eva的索引值
 6 print(names.index("eva",names.index("eva")+1))
 7 把以上的列表通过切片的形式实现反转
 8 print(a,names[::-1])
 9 打印列表中所有下标为奇数的值
10 count = 0
11 while count <= len(names)-1:
12     if count % 2 == 1:
13         print(count,names[count])
14     count+=1
15 通过names.index()方法找到第2个eva值 ,并将其改成EVA
16 names[names.index("eva",names.index("eva")+1)]="EVA"
17 print(names)
18 
19 """
练习题参考答案

 元组

有些时候我们的列表数据不想被人修改时怎么办? 就可以用元组存放,元组又被称为只读列表,不能修改。

定义:与列表类似,只不过[]改成()

特性:

  1.可存放多个值

  2.不可变

  3.
按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序

创建

ages = (11, 22, 33, 44, 55)
#或
ages = tuple((11, 22, 33, 44, 55))

常用操作

#索引
>>> ages = (11, 22, 33, 44, 55)
>>> ages[0]
11
>>> ages[3]
44
>>> ages[-1]
55
#切片:同list  
#循环
>>> for age in ages:
    print(age)
11
22
33
44
55
#长度
>>> len(ages)
5
#包含
>>> 11 in ages
True
>>> 66 in ages
False
>>> 11 not in ages
False

注意:元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变

>>> data 
(99, 88, 77, ['Alex', 'Jack'], 33)
>>> data[3][0] = '金角大王'
>>> data
(99, 88, 77, ['金角大王', 'Jack'], 33)

为啥呢? 因为元组只是存每个元素的内存地址,上面[‘金角大王’, ‘Jack’]这个列表本身的内存地址存在元组里确实不可变,但是这个列表包含的元素的内存地址是存在另外一块空间里的,是可变的。

 

转载于:https://www.cnblogs.com/ys-python/p/11213476.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值