Python基础--列表与元组

2021-05-17  本文已影响0人  琰雪儿

一、列表

Python中等列表与Java等语言中等数组类似。用方括号[]包括起来,以逗号,来分隔其中的元素。元素可以是任意类型,数字(整数和浮点数)、布尔(bool)、字符串、列表、字典、元组。
例:

>>> list = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']

1.索引

①正索引和负索引

在字符串一节我们提到,Python中的字符串其实是一个Unicode字符列表,并且具有正负索引。列表具有正负索引。
以上例中的列表为例:

字符 星期一 星期二 星期三 星期四 星期五 星期六 星期天
正索引 0 1 2 3 4 5 6
负索引 -7 -6 -5 -4 -3 -2 -1
>>> list[3]
'星期四'
>>> list[-4]
'星期四'
# 字符串本身就是字符列表,所以字符串列表本质就是个二维列表。
>>> list[3][2]
'四'
虽然拥有正负索引,但是仍然需要注意超出索引范围导致的错误
>>> list[-8]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> list[7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

②列表截取(切片):截取后的内容组成新的列表

语法:list[开始索引:结束索引],遵循包左不包右原则。不写开始索引和结束索引,为全部。

>>> list = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
>>> list[2:6]
['星期三', '星期四', '星期五', '星期六']
>>> list[2:]
['星期三', '星期四', '星期五', '星期六', '星期天']
>>> list[:6]
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
>>> list[:]
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']

2.添加列表元素

append():列表末尾添加

>>> list.append("假期")
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']

insert():在列表中插入元素

>>> list.insert(3,"insert")
>>> print(list)
['星期一', '星期二', '星期三', 'insert', '星期四', '星期五', '星期六', '星期天', '假期']

extend():将一个列表依次插入到另一个列表中

>>> list.extend(extendList)
>>> print(list)
['星期一', '星期二', '星期三', 'insert', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']

3.删除列表元素

del语句和del()删除元素:可以根据索引删除任何位置的列表元素

# 删除前
>>> print(list)
['星期一', '星期二', '星期三', 'insert', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
>>> del list[3]
# 删除后
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
>>> del(list[1])
>>> print(list)
['星期一', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']

pop()删除元素:默认索引为-1,删除最后一个列表值。并且返回该元素的值。也可以通过设置下标索引进行删除

# 删除前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二', '周三']
>>> list.pop()
'周三'
# 删除前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周一', '周二']
>>> list.pop(-2)
'周一'

remove():根据值删除元素

# 删除前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期', '周二']
>>> list.remove("周二")
# 删除后
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']

只会删除第一次出现的值。

>>> removelist = [1,1,3,3,4,1,1,6]
>>> removelist.remove(1)
>>> print(removelist)
[1, 3, 3, 4, 1, 1, 6]

clear()清空列表,类似于 del a[:]

>>> list.clear()
>>> print(list)
[]

总结:

1、知道值不知道索引选`remove()`;
2、知道索引但是不再使用被删除的值选`del`;
3、知道索引在删除后还想继续使用被删除的值,选`pop()`。

4.修改列表元素

修改元素的语法与访问的语法类似,直接通过索引获取要修改的元素,然后给其设置上新的值即可。

# 修改前
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']
>>> list[-1] = "不放假"
# 修改后
>>> print(list)
['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '不放假']

5.列表的整理

sort():对列表进行永久性排序

>>> sortlist = [332,12,1,4,55,2,44]
>>> sortlist.sort()
>>> print(sortlist)
[1, 2, 4, 12, 44, 55, 332]

sorted():对列表进行临时排序

>>> sortedlist = [332,12,1,4,55,2,44]
>>> sorted(sortedlist)
[1, 2, 4, 12, 44, 55, 332]
>>> print(sortedlist)
[332, 12, 1, 4, 55, 2, 44]

reverse():按照索引位置,整体倒过来,不是按照顺序排序。

>>> reverselist = [23,11,23,1,4,555,666]
>>> reverselist.reverse()
>>> print(reverselist)
[666, 555, 4, 1, 23, 11, 23]

6.列表索引的查找

>>> list = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天', '假期']
>>> list.index("星期三")
2
>>> list.index("星期三",2)
2
# 包左不包右
>>> list.index("星期三",0,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: '星期三' is not in list
>>> list.index("星期三",0,3)
2

7.统计列表中元素出现的次数

>>> list = [123,122,333,22,111,1123,123,123]
>>> list.count(123)
3

8.列表的复制

语法:目的列表 = 复制源列表[:]

>>> list1 = [1,2,3,4]
>>> list2 = list1[:]
>>> list2
[1, 2, 3, 4]

肯定有人问了,为什么不直接写成list2 = list1。我们先看一下效果。

>>> list3 = list1
>>> list3
[1, 2, 3, 4]

在不对列表进行改变的前提下,两者都达到了复制都目的,但是从根本上来讲。list3 = list1利用Java中都地址值来说。list3list1指向同一地址,也就是说,list3就是list1list1就是list3,两者直接是完全相同都,而不是复制出来都副本关系。我们现在来改变list1都值,再来看list2list3都变化。

>>> list1[1] = 22
>>> list1
[1, 22, 3, 4]
>>> list2
[1, 2, 3, 4]
>>> list3
[1, 22, 3, 4]

现在可以看出两者都区别了吧! 所以列表复制的语法必须是目的列表 = 复制源列表[:]

9.列表解析又叫做列表推导式

在学习之前我们先学习range()方法,用来生产一系列数字

>>> for value in range(1,6):
...     print(value)
...
1
2
3
4
5

语法:

[expression for iter_val in iterable]
[expression for iter_val in iterable if cond_expr]
>>> list = [value for value in range(1,10)]
>>> print(list)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list = [value for value in range(1,10) if value >= 4]
>>> print(list)
[4, 5, 6, 7, 8, 9]

10.多重赋值

>>> list1 = [1,2,3,4]
>>> a, b, c, d=list1
>>> a
1
>>> b
2
>>> c
3
>>> d
4

当然需要赋值的变量个数要与列表长度一致,否则便会报错。

>>> a, b, c, d, e=list1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 5, got 4)
>>> a, b, c=list1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 3)

二、元组

Python元组列表类似,不同之处在于元组的元素不能修改。元组使用小括号(),列表使用方括号[]
注意:元组中只包含一个元素时,需要在元素后面添加逗号tup1 = (1,)。因为不带逗号python会将其识别为其他类型。

# 不加逗号
>>> tup1 = (1)
>>> tup1
1
>>> type(tup1)
<class 'int'>
# 加上逗号
>>> tup1 = (1,)
>>> tup1
(1,)
>>> type(tup1)
<class 'tuple'>

虽然元组自身不能修改但是可以通过多个元组拼接成新元组。

>>> tup1=(1,2)
>>> tup2=(2,3)
>>> tup3=tup1+tup2
>>> tup3
(1, 2, 2, 3)

也可以通过del语句来删除整个元组。

>>> tup3
(1, 2, 2, 3)
>>> del tup3
>>> tup3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'tup3' is not defined

无关闭分隔符,任意无符号的对象,以逗号隔开,默认为元组。

>>> tup1 = 12,31
>>> tup1
(12, 31)
>>> type(tup1)
<class 'tuple'>

关于列表与元组就到此结束了。

每日一言
虽然选择大于努力,但努力会为选择提供更多的选项。

上一篇下一篇

猜你喜欢

热点阅读