Python 列表、元组

1. 列表

1.1 列表介绍

1.2 列表的循环遍历

1.3 列表的常用操作

2. 元组

2.1 元组介绍

2.2 元组的常用操作

2.3 多维列表/元组的访问

 

1. 列表

1.1 列表介绍

Python的列表比C语言的数组强大的地方在于,列表中的元素可以是不同类型的。

li = [1, "a", 1.2, [1, 2], (1, 2), {1:2}, {1, 2}]

  

1.2 列表的循环遍历

使用for循环

 1 >>> li = [1, "a", 1.2, [1, 2], (1, 2), {1:2}, {1, 2}]
 2 >>> li
 3 [1, 'a', 1.2, [1, 2], (1, 2), {1: 2}, {1, 2}]
 4 >>> for i in li:
 5 ...     print(i)
 6 ...
 7 1
 8 a
 9 1.2
10 [1, 2]
11 (1, 2)
12 {1: 2}
13 {1, 2}

使用While循环

 1 >>> li = [1, "a", 1.2, [1, 2], (1, 2), {1:2}, {1, 2}]
 2 >>> num = len(li)
 3 >>> flag = 0
 4 >>> while flag < num:
 5 ...     print(li[flag])
 6 ...     flag+=1
 7 ...
 8 1
 9 a
10 1.2
11 [1, 2]
12 (1, 2)
13 {1: 2}
14 {1, 2}

 带索引的遍历

>>> # 方法一
>>> li = ["one", "two", "three"]
>>> num = 1
>>> for i in li:
...     print("%d:%s" % (num, i))
...     num += 1
...
1:one
2:two
3:three
>>> 
>>> # 方法二:使用enumerate()函数
>>> for num, i in enumerate(li):
...     print("%d:%s" % (num, i))
...
0:one
1:two
2:three

 

1.3 列表的常用操作

创建

>>> # 方法一
>>> li = [1, 2, "a"]
>>> 
>>> # 方法二:使用list()函数
>>> li = list()  # 创建空列表
>>> li
[]
>>> list((1, "a"))  # 传入元组
[1, 'a']
>>> list([1, 2])  # 传入列表
[1, 2]
>>> list("abcd")  # 传入字符串
['a', 'b', 'c', 'd']
>>> list({1:2, "a":3})  # 传入字典,仅返回键
[1, 'a']
>>> list({1, 2, 3})  # 传入集合
[1, 2, 3]

 增

  • append():向列表中添加元素。
  • extend():将另一个列表中的元素添加至列表中。
  • insert(index, obj):在列表中的指定索引位置index插入元素obj。

示例:

 1 >>> li = ["a", 1]
 2 >>> li.append(2)
 3 >>> li
 4 ['a', 1, 2]
 5 >>> li.extend([3,4,5])
 6 >>> li
 7 ['a', 1, 2, 3, 4, 5]
 8 >>> li.insert(1,"b")
 9 >>> li
10 ['a', 'b', 1, 2, 3, 4, 5]

  • del:根据索引删除元素。
  • pop():删除最后一个元素,并会返回该元素。
  • remove():根据元素的值进行删除(若元素重复存在,则只删除第一个)。
 1 >>> li
 2 ['a', 'b', 1, 2, 3, 4, 5]
 3 >>> del li[0]
 4 >>> li
 5 ['b', 1, 2, 3, 4, 5]
 6 >>> li.pop()
 7 5
 8 >>> li
 9 ['b', 1, 2, 3, 4]
10 >>> li.remove(1)
11 >>> li
12 ['b', 2, 3, 4]

通过索引来修改指定元素。

1 >>> li
2 ['b', 2, 3]
3 >>> li[0] = "c"
4 >>> li
5 ['c', 2, 3]

  • in、not in(Python中常用的查找方法)
    • in:如果存在则返回True,反之返回False。
    • not in:如果不存在则返回True,反之返回False。
  • index():list.index(obj, start, end) 与字符串中的用法一样,检查元素obj在索引(start和end)之间是否包含在列表list中,如果是,则返回str开始的索引;若不包含则返回一个异常。
  • count():list.count(obj, start, end) 与字符串中的用法一样,返回元素obj在索引(start和end)之间在列表list中出现的次数。
 1 >>> li
 2 ['c', 2, 3]
 3 >>> 2 in li
 4 True
 5 >>> 2 not in li
 6 False
 7 >>> li.index(3)
 8 2
 9 >>> li.append(2)
10 >>> li.count(2)
11 2
12 >>> li.count("c")
13 1
14 >>> # 查找最后一个2的索引值
15 >>> li = [1, 2, 5, 2, 4, 6]
16 >>> len(li) - 1 - (li[::-1].index(2))
17 >>> 3

排序

  • sort(key, reverse):将list按特定顺序排序(默认是从小到大),参数reverse设为True可改为倒序(即从大到小)。
  • reverse():将list的元素按逆序排序。
 1 >>> li = [2, 3, 1, 5]
 2 >>> li.reverse()
 3 >>> li
 4 [5, 1, 3, 2]
 5 >>> li.sort()
 6 >>> li
 7 [1, 2, 3, 5]
 8 >>> li.sort(reverse=True)
 9 >>> li
10 [5, 3, 2, 1]

自定义排序:sort()函数的参数key的作用

  • 参数key是一个函数,这个函数的作用是从list中的每个元素中提取用于作为排序依据的属性。也就是说key是一个函数,输入是list的每一个元素,输出是用于排序的东西,默认的排序依据是list的单个元素。
  • 举例:list = [(3, 66), (5, 3), (1, 23)],该list的元素是元组,默认来说,list.sort()后,list = [(1, 23), (3, 66), (5, 3)]。如果排序依据是每个元组的第二个元素,可以使用以下方法:
 1 >>> list = [(3, 66), (5, 3), (1, 23)]
 2 >>> # 方法一:编写函数
 3 >>> def f(item):
 4 ...     return item[1]
 5 ...
 6 >>> list.sort(key=f)
 7 >>> list
 8 [(5, 3), (1, 23), (3, 66)]
 9 
10 
11 >>> list = [(3, 66), (5, 3), (1, 23)]
12 >>> # 方法二:使用匿名函数
13 >>> list.sort(key=lambda item:item[1])
14 >>> list
15 [(5, 3), (1, 23), (3, 66)]

练习题:对一个 list 中的元素进行去重

方式1:使用 set() 函数直接去重

1  # 需要去重的列表
2  raw_list = [1, 2, 2, "a", "a", 5, [12], [12]]
3  
4  # 该方法的缺陷:原列表中不可存在可变类型,否则会报错
5  # print(set(raw_list))

方式2:借用临时列表

1 # 存放去重后的新列表
2 new_list = []
3  
4 for i in raw_list:
5 # 遍历旧列表,如果该元素已存在新列表中,则不添加
6 if i not in new_list:
7         new_list.append(i)
8         
9 print(new_list)  # [1, 2, 'a', 5, [12]]

方式3:利用字典 key 不能重复的特点

1 # 需要去重的列表
2 raw_list = [1, 2, 2, "a", "a", 5]
3 
4 # 此方法缺陷:原列表中不可存在可变类型,否则会报错
5 result = list(dict.fromkeys(raw_list, 0))
6 print(result)  # [1, 2, 'a', 5]

方式4:count() + remove()

1 # 需要去重的列表
2 raw_list = [1, 2, 2, "a", "a", 5, [12], [12]]
3 
4 for i in raw_list:
5     if raw_list.count(i) > 1:
6         for j in range(raw_list.count(i)-1):
7             raw_list.remove(i)
8 
9 print(raw_list)  # [1, 2, 'a', 5, [12]]

方法5:从后往前遍历,判断该元素是否存在于当前位置之前的子列表中

1 # 需要去重的列表
2 raw_list = [1, 2, 2, "a", "a", 5, [12], [12]]
3 
4 for i in range(len(raw_list)-1, 0, -1):
5     if raw_list[i] in raw_list[:i]:
6         raw_list.pop(i)
7 
8 print(raw_list)

 

 

2. 元组

2.1 元组介绍

Python中的元组与list相似,不同之处在于:

  • 元组的元素不能修改。
  • 元组使用小括号,列表使用中括号。
t = (1, "a", 1.2, [1, 2], (1, 2), {1: 2}, {1, 2})

注意:元组元素不可变指的是元素的内存地址不可变,若元素为可变类型,则可变类型中的元素是可变的。

1 >>> a=(1,2,3,[4,5,6],{1:2})
2 >>> a[4]["x"]="abc"
3 >>> a
4 (1, 2, 3, [4, 5, 6], {1: 2, 'x': 'abc'})

  

2.2 元组的常用操作

创建

>>> # 方法一
>>> t = (1, "a", 1.2, [1, 2], (1, 2), {1: 2}, {1, 2})
>>> t
(1, 'a', 1.2, [1, 2], (1, 2), {1: 2}, {1, 2})
>>> 
>>> # 方法二:使用tuple()函数
>>> tuple()
()
>>> tuple((1, 2, 3))
(1, 2, 3)
>>> tuple([1, 2, "c"])
(1, 2, 'c')
>>> tuple("abcd")
('a', 'b', 'c', 'd')
>>> tuple({1: 2, 2: "a"})
(1, 2)
>>> tuple({"a", 1})
(1, 'a')

  • in、not in(Python中常用的查找方法)
    • in:如果存在则返回True,反之返回False。
    • not in:如果不存在则返回True,反之返回False。
  • index():tuple.index(obj, start, end) 与字符串中的用法一样,检查元素obj在索引(start和end)之间是否包含在元组tuple中,如果是,则返回str开始的索引;若不包含则返回一个异常。
  • count():tuple.count(obj, start, end) 与字符串中的用法一样,返回元素obj在索引(start和end)之间在元组tuple中出现的次数。
 1 >>> # 访问元组的元素
 2 >>> t = (1, 2, 3, 1, 2, 5)
 3 >>> t[2:4]
 4 (3, 1)
 5 >>> t[::-1]
 6 (5, 2, 1, 3, 2, 1)
 7 >>> # 使用函数
 8 >>> 5 in t
 9 True
10 >>> 4 not in t
11 True
12 >>> t.index(2)
13 1
14 >>> t.count(2)
15 2

 

 2.3 多维列表/元组的访问

 1 >>> li = [(1, 2),[3, 4]]
 2 >>> li[0][0]
 3 1
 4 >>> li[1][0]
 5 3
 6 >>> t = (("a", "b"), ["c", "d"])
 7 >>> t[1][1]
 8 'd'
 9 >>> t[0][1]
10 'b'

 

posted @ 2020-02-15 22:40  Juno3550  阅读(205)  评论(0编辑  收藏  举报