• 列表及操作
• 元组及操作
• 字典及操作
• 集合简介

## 3.1　列表

### 3.1.1　列表的创建

In [1]: vowels = ['a', 'e', 'i', 'o', 'u']In [2]: vowelsOut[2]: ['a', 'e', 'i', 'o', 'u']

In [3]: array_init = []In [4]: array_initOut[4]: []

In [5]: vowels[2]Out[5]: 'i'

a e i o u0 1 2 3 4

In [7]: rectangle = ['长方形1', 20, [4, 5], '长方形2', 16, [4, 4]]In [8]: rectangleOut[8]: ['长方形1', 20, [4, 5], '长方形2', 16, [4, 4]]

In [9]: len(rectangle)Out[9]: 6

In [10]: rectangle[6]---------------------------------------------------------------------------IndexError                                Traceback (most recent call last)<ipython-input-10-6e16763c0048> in <module>()----> 1 rectangle[6]IndexError: list index out of range

In [17]: aseq = "atggctaggc"In [18]: list(aseq)Out[18]: ['a', 't', 'g', 'g', 'c', 't', 'a', 'g', 'g', 'c']

### 3.1.2　修改列表元素

In [11]: odd_numbers = [1, 3, 5, 7, 8]

In [12]: odd_numbers = [1, 3, 5, 7, 9]

In [13]: odd_numbers = [1, 3, 5, 7, 8]In [14]: odd_numbers[4] = 9In [15]: odd_numbersOut[15]: [1, 3, 5, 7, 9]

In [16]: odd_numbers[-1]Out[16]: 9

a   e   i   o   u-5  -4  -3  -2  -1

### 3.1.3　遍历列表

print(odd_numbers[0])print(odd_numbers[1])print(odd_numbers[2])print(odd_numbers[3])print(odd_numbers[4])

In [24]: for i in odd_numbers:             print(i)13579

In [26]: nested_list = ['记录', 3, ['小明', '小红', '小蓝'], [2.30, 2.41, 2.33]]

In [27]: for i in nested_list:    ...:     print(i)    ...:记录3['小明', '小红', '小蓝'][2.3, 2.41, 2.33]

### 3.1.4　列表操作符

1．加号

In [28]: a = [1, 2, 3]In [29]: b = [4, 5, 6]In [30]: a + bOut[30]: [1, 2, 3, 4, 5, 6]

a + b的结果是将列表b中的元素拼接到列表a的后面，生成了一个新的列表。

In [31]: b = [4, 5, '6']In [32]: a + bOut[32]: [1, 2, 3, 4, 5, '6']

2．星号

In [33]: a * 5Out[33]: [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]

### 3.1.5　列表切片

In [34]: letters7 = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

In [37]: you_want = letters7[0:4]In [38]: you_wantOut[38]: ['a', 'b', 'c', 'd']

In [39]: letters7[0:4:1]Out[39]: ['a', 'b', 'c', 'd']

In [40]: letters7[:4]Out[40]: ['a', 'b', 'c', 'd']

In [41]: letters7[:7]Out[41]: ['a', 'b', 'c', 'd', 'e', 'f', 'g']In [42]: letters7[4:]Out[42]: ['e', 'f', 'g']

In [43]: letters7[-1]Out[43]: 'g'In [44]: letters7[-1:]Out[44]: ['g']

In [45]: letters7[::1]Out[45]: ['a', 'b', 'c', 'd', 'e', 'f', 'g']In [46]: letters7[::2]Out[46]: ['a', 'c', 'e', 'g']

In [47]: letters7[::-1]Out[47]: ['g', 'f', 'e', 'd', 'c', 'b', 'a']In [48]: letters7[::-2]Out[48]: ['g', 'e', 'c', 'a']

In [49]: letters7[0:2] = ['h', 'i']In [50]: letters7Out[50]: ['h', 'i', 'c', 'd', 'e', 'f', 'g']

In [51]: letters7[0:2] = ['a']In [52]: letters7Out[52]: ['a', 'c', 'd', 'e', 'f', 'g']In [53]: letters7[0:1] = ['a', 'b']In [54]: letters7Out[54]: ['a', 'b', 'c', 'd', 'e', 'f', 'g']

In [55]: letters7[0:2] = 'h'In [56]: letters7Out[56]: ['h', 'c', 'd', 'e', 'f', 'g']

### 3.1.6　列表方法、函数与操作

Python为列表提供了很多方法，用来简化列表的各项常用操作。常用操作包括添加元素、删除元素、插入元素等。

1．添加元素

Python中有3种方法可以为列表添加元素，分别是append()、insert()和extend()。

（1）append(element)：将元素element添加到列表的末尾。

In [59]: example_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]In [60]: example_list.append(11)In [61]: example_listOut[61]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

（2）insert(position, element)：将元素element插入列表指定position位置。

In [62]: example_list.insert(2, 12)In [63]: example_listOut[63]: [1, 2, 12, 3, 4, 5, 6, 7, 8, 9, 10, 11]

（3）extend(list)：使用另一个列表作参数，然后把所有的元素添加到一个列表上。

In [64]: example_list.extend([13,14])In [65]: example_listOut[65]: [1, 2, 12, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14]

2．删除元素

（1）pop([index])：移除索引位置index的元素并返回它的值，如果没有参数，则默认删除和返回最后一个。

In [67]: example_list.pop()Out[67]: 14In [68]: example_list.pop(2)Out[68]: 12

（2）remove(element)：移除参数中指定的元素element，如果存在多个同样的值，则移除最左边的。不同于pop()，这个方法不返回任何值。

In [69]: example_list.remove(13)In [70]: example_listOut[70]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

（3）另一种方式是使用del命令，del list[0]类似于list.pop(0)，但前者不会返回被删除的元素。

In [71]: del example_list[10]In [72]: example_listOut[72]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

In [73]: example_list.clear()In [74]: example_listOut[74]: []

3．列表排序

In [78]: a = [3, 1, 2, 5, 4, 6]In [79]: a.sort()In [80]: aOut[80]: [1, 2, 3, 4, 5, 6]

In [81]: nums = [-1, 34, 0.2, -4, 309]In [82]: nums_desc = sorted(nums, reverse=True)In [83]: numsOut[83]: [-1, 34, 0.2, -4, 309]In [84]: nums_descOut[84]: [309, 34, 0.2, -1, -4]

reverse()方法可以将列表按位置翻转。

In [90]: numsOut[90]: [1, 2, 2, 2, 3, 3, 4, 5]In [91]: nums.reverse()In [92]: numsOut[92]: [5, 4, 3, 3, 2, 2, 2, 1]

4．简单统计

min()与max()函数可以计算列表最小值与最大值。

In [85]: min(nums)Out[85]: -4In [86]: max(nums)Out[86]: 309

In [87]: nums = [1, 2, 2, 2, 3, 3, 4, 5]In [88]: nums.count(2)Out[88]: 3In [89]: nums.count(3)Out[89]: 2

sum()函数可以对数值列表求和。

In [93]: sum(nums)Out[93]: 22

5．逻辑判断

In [76]: 4 in example_listOut[76]: FalseIn [77]: 3 in example_listOut[77]: True

all()与any()函数用于逻辑值列表，all()判别列表所有值是否都为真，全真时返回True，否则返回False；any()用于判别只要任一元素为真，则返回True，否则返回False。

In [94]: conditions = [True, False, True]In [95]: all(conditions)Out[95]: FalseIn [96]: any(conditions)Out[96]: True

In [97]: a = [1, 2, 3, 4]In [98]: a == [1, 2, 3, 5]Out[98]: FalseIn [99]: a == [1, 3, 2, 4]Out[99]: FalseIn [100]: a == [1, 2, 3, 4]Out[100]: True

6．最常见操作方法汇总

 表示 描述 l.append(x) 添加元素x到列表 l.count(x) 计算列表中x出现的次数 l.index(x) 返回元素x的位置（索引） l.remove(x) 从列表中移除x l.reverse() 翻转列表 l.sort() 列表排序

### 3.1.7　列表与字符串

In [101]: s = 'interactive Python'In [102]: t = list(s)In [103]: tOut[103]:['i', 'n', 't', 'e', 'r', 'a', 'c', 't', 'i', 'v', 'e', ' ', 'P', 'y', 't', 'h', 'o', 'n']

In [104]: s.split()Out[104]: ['interactive', 'Python']

In [105]: s = 'interactive-Python'In [107]: s.split('-')Out[107]: ['interactive', 'Python']

In [108]: t = ['我','是', '谁', '？']In [109]: ''.join(t)Out[109]: '我是谁？'

### 3.1.8　列表对象与值

In [4]: a = 'banana'In [5]: b = 'banana'

In [6]: a is bOut[6]: True

In [10]: id(a)Out[10]: 1691582590008In [11]: id(b)Out[11]: 1691582590008

In [12]: a = "orange"In [13]: bOut[13]: 'banana'

In [14]: a = [1, 2, 3]In [15]: b = [1, 2, 3]In [16]: a is bOut[16]: FalseIn [17]: id(a)Out[17]: 1691581888264In [18]: id(b)Out[18]: 1691582794120

In [19]: b = aIn [20]: a is bOut[20]: TrueIn [21]: id(b)Out[21]: 1691581888264

In [22]: e = aIn [23]: eOut[23]: [1, 2, 3]In [24]: aOut[24]: [1, 2, 3]In [25]: a[1] = 4In [26]: eOut[26]: [1, 4, 3]

## 3.2　元组

### 3.2.1　元组的创建

In [1]: a_tuple = (1, 2, 3)In [2]: a_list = [1, 2, 3]

In [6]: another_tuple = 1,2,3In [7]: type(another_tuple)Out[7]: tuple

In [8]: 1Out[8]: 1In [9]: (1)Out[9]: 1In [10]: 1,Out[10]: (1,)In [11]: (1,)Out[11]: (1,)

In [14]: tuple("Python")Out[14]: ('P', 'y', 't', 'h', 'o', 'n')In [15]: tuple(["I", "am", ["learning", "Python"]])Out[15]: ('I', 'am', ['learning', 'Python'])

### 3.2.2　元组操作

1．操作符

In [16]: ('a',) + ('b',)Out[16]: ('a', 'b')In [17]: ('a',) * 3Out[17]: ('a', 'a', 'a')

2．切片

In [18]: pythonName = tuple("Python")In [19]: pythonNameOut[19]: ('P', 'y', 't', 'h', 'o', 'n')In [20]: pythonName[0]Out[20]: 'P'In [21]: pythonName[0:3]Out[21]: ('P', 'y', 't')In [22]: pythonName[3:]Out[22]: ('h', 'o', 'n')

3．修改

In [23]: pythonName[0] = 'p'---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-23-19ded1757eee> in <module>()----> 1 pythonName[0] = 'p'TypeError: 'tuple' object does not support item assignment

In [24]: newName = ('p',) + pythonName[1:]In [25]: newNameOut[25]: ('p', 'y', 't', 'h', 'o', 'n')

4．变量值交换

# a和b是已经创建的变量，t是一个临时变量t = aa = bb = t

a, b = b, a

## 3.3　字典

### 3.3.1　字典的创建与使用

In [5]: weight = {'小红':65, '小明':45, '我':75}

In [6]: weightOut[6]: {'小明': 45, '小红': 65, '我': 75}

In [7]: weight['小明']Out[7]: 45

In [8]: weight.keys()Out[8]: dict_keys(['小红', '小明', '我'])In [9]: weight.values()Out[9]: dict_values([65, 45, 75])

In [10]: int_dict = {}In [11]: int_dictOut[11]: {}

In [13]: rgb = [('red', 'ff0000'), ('green', '00ff00'), ('blue', '0000ff')]In [14]: dict(rgb)Out[14]: {'blue': '0000ff', 'green': '00ff00', 'red': 'ff0000'}

In [15]: dict(red='ff0000',green='00ff00', blue='0000ff')Out[15]: {'blue': '0000ff', 'green': '00ff00', 'red': 'ff0000'}

In [16]: rgb = {}In [17]: rgb['red'] = 'ff0000'In [18]: rgb['green'] = '00ff00'In [19]: rgb['blue'] = '0000ff'In [20]: rgbOut[20]: {'blue': '0000ff', 'green': '00ff00', 'red': 'ff0000'}

### 3.3.2　字典操作

In [21]: len(rgb)Out[21]: 3

In [22]: rgb.pop()---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-22-1654217e28c5> in <module>()----> 1 rgb.pop()TypeError: pop expected at least 1 arguments, got 0In [23]: rgb.pop('blue')Out[23]: '0000ff'In [24]: rgbOut[24]: {'green': '00ff00', 'red': 'ff0000'}

In [25]: del rgbIn [26]: rgb---------------------------------------------------------------------------NameError                                 Traceback (most recent call last)<ipython-input-26-d412e57c3c38> in <module>()----> 1 rgbNameError: name 'rgb' is not defined

In [28]: rgb.get('red', '键不存在')Out[28]: 'ff0000'In [29]: rgb.get('yellow', '键不存在')Out[29]: '键不存在'

In [32]: from collections import OrderedDictIn [33]: OrderedDict(rgb)Out[33]: OrderedDict([('red', 'ff0000'), ('green', '00ff00'), ('blue', '0000ff')])In [35]: order_dict = OrderedDict()In [36]: order_dict['a'] = 1In [37]: order_dict['b'] = 2In [38]: order_dict['c'] = 3In [39]: order_dictOut[39]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])

## 3.4　集合

### 3.4.1　集合的创建

In [40]: a_set = {1, 2, 3, 4, 5, 5, 4}In [41]: a_setOut[41]: {1, 2, 3, 4, 5}

In [42]: a_set = {}In [43]: a_set.add(1)---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-43-2a4eeb394ac5> in <module>()----> 1 a_set.add(1)AttributeError: 'dict' object has no attribute 'add'

In [44]: a_set = set()In [45]: a_set.add(1)In [46]: a_setOut[46]: {1}

### 3.4.2　集合操作

1．合集

In [47]: a_set = set([1, 2, 3, 4, 5])In [48]: b_set = set([4, 5, 6, 7, 8])In [49]: a_setOut[49]: {1, 2, 3, 4, 5}In [50]: b_setOut[50]: {4, 5, 6, 7, 8}In [51]: a_set.union(b_set)Out[51]: {1, 2, 3, 4, 5, 6, 7, 8}

2．交集

In [52]: a_set.intersection(b_set)Out[52]: {4, 5}

3．差集

In [53]: a_set.difference(b_set)Out[53]: {1, 2, 3}

### 3.4.3　冰冻集

In [1]: fs = frozenset(['a', 'b'])In [2]: fsOut[2]: frozenset({'a', 'b'})In [3]: fs.remove('a')---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-3-b55f44b7e2c9> in <module>()----> 1 fs.remove('a')AttributeError: 'frozenset' object has no attribute 'remove'In [4]: fs.add('c')---------------------------------------------------------------------------AttributeError                            Traceback (most recent call last)<ipython-input-4-34531eab3bc0> in <module>()----> 1 fs.add('c')AttributeError: 'frozenset' object has no attribute 'add'

## 3.5　章末小结

Python具有强大的应用能力，以及便捷高效的数据分析和可视化扩展包系统。本书重点讲解Python数据分析的基础知识，使读者通过Python理解数据分析的逻辑，并掌握基本的Python编程知识和分析实现方法。本书系统全面、循序渐进地介绍了Python编程基础、数据导入、数据分析和可视化内容，包括条件判断与循环控制、从Excel中导入数据、使用Pandas库进行数据的转换和计算，以及使用Plotnine库绘制ggplot风格的图形等。此外，本书还涉及Markdown、基本的统计理论和IPython魔术命令等内容。