Skip to content

Latest commit

 

History

History
716 lines (442 loc) · 13.1 KB

File metadata and controls

716 lines (442 loc) · 13.1 KB

第4节 Python列表

❤️💕💕python是一种动态的解释形语言,由于python的普遍性,学会python能更快的解决问题,以及学习其他的知识。Myblog:http:https://nsddd.top


[TOC]

列表

列表用于将多个项目存储在单个变量中。

列表是 Python 中用于存储数据集合的 4 种内置数据类型之一,另外 3 种是TupleSetDictionary,它们都具有不同的质量和用途。

创建一个列表:

thislist = ["apple", "banana", "cherry"]
print(thislist)

列出项目

列表项是有序的、可更改的,并且允许重复值。

列表项被索引,第一项具有索引[0],第二项具有索引[1]等。

多变

列表是可更改的,这意味着我们可以在创建列表后更改、添加和删除列表中的项目。

允许重复

由于列表是索引的,因此列表可以包含具有相同值的项目:

thislist = ["apple", "banana", "cherry", "apple", "cherry"]
print(thislist)

列表长度

要确定列表有多少项,请使用以下 len()函数:

打印列表中的项目数:

thislist = ["apple", "banana", "cherry"]
print(len(thislist))

列表项 - 数据类型

列表项可以是任何数据类型:

字符串、整数和布尔数据类型:

list1 = ["apple", "banana", "cherry"]
list2 = [1, 5, 7, 9, 3]
list3 = [True, False, False]

一个列表可以包含不同的数据类型:

包含字符串、整数和布尔值的列表:

list1 = ["abc", 34, True, 40, "male"]

类型()

从 Python 的角度来看,列表被定义为数据类型为“列表”的对象:

<class 'list'>

列表的数据类型是什么?

mylist = ["apple", "banana", "cherry"]
print(type(mylist))

list() 构造函数

创建新列表时也可以使用list()构造函数。

使用list()构造函数创建一个列表:

thislist = list(("apple", "banana", "cherry")) # note the double round-brackets
print(thislist)

Python 集合(数组)

Python 编程语言中有四种集合数据类型:

  • List是一个有序且可变的集合。允许重复成员。
  • **元组**是一个有序且不可更改的集合。允许重复成员。
  • **Set**是一个无序、不可更改*和无索引的集合。没有重复的成员。
  • **字典是一个有序的集合和可变的。没有重复的成员。

套装物品*不可更改,但您可以随时删除和/或添加物品。

**从 Python 3.7 版开始,字典是有序的。在 Python 3.6 及更早版本中,字典是无序的。

选择集合类型时,了解该类型的属性很有用。为特定数据集选择正确的类型可能意味着保留意义,并且可能意味着提高效率或安全性。

案例

In [10]: a
Out[10]: ['asfa', 'sad']

In [11]: str(a)
Out[11]: "['asfa', 'sad']"

In [12]: a
Out[12]: ['asfa', 'sad']

In [13]: type(a)
Out[13]: list

In [14]: a = {12,31,4,1,3,}

In [15]: a
Out[15]: {1, 3, 4, 12, 31}

In [16]: type(a)
Out[16]: set

In [17]: a = (12,31,4,1,3)

In [18]: a
Out[18]: (12, 31, 4, 1, 3)

In [19]: type(a)
Out[19]: tuple

In [20]: a = [12,31,4,1,3]

In [21]: type(a)
Out[21]: list

更改列表项

直接更改就好,不需要很对操作

In [15]: a
Out[15]: [12, 31, 4, 1, 3]

In [16]: a[1] = 14

In [17]: a
Out[17]: [12, 14, 4, 1, 3]

In [18]: a[0:3] = [1,2,3]

In [19]: a
Out[19]: [1, 2, 3, 1, 3]

插入项目

要插入一个新的列表项,而不替换任何现有值,我们可以使用该insert()方法。

insert()方法在指定索引处插入一个项目:

插入“西瓜”作为第三项:

In [20]: thislist = ["apple", "banana", "cherry"]
    ...: thislist.insert(2, "watermelon")
    ...: print(thislist)
['apple', 'banana', 'watermelon', 'cherry']

In [23]: a.insert(1,123142)
In [24]: a
Out[24]: [1, 123142, 2, 3, 1, 3]

插入还有其他的方法,叫做添加列表项

使用该append()方法附加一个项目:

thislist = ["apple", "banana", "cherry"]
thislist.append("orange")
print(thislist)
####
In [24]: a
Out[24]: [1, 123142, 2, 3, 1, 3]

In [25]: a.append(1111)

In [26]: a
Out[26]: [1, 123142, 2, 3, 1, 3, 1111]

但是要在指定索引处插入列表项,请使用insert()方法。

insert()方法在指定索引处插入一个项目:

插入一个项目作为第二个位置:

thislist = ["apple", "banana", "cherry"]
thislist.insert(1, "orange")
print(thislist)

扩展

要将另一个列表中的元素附加到当前列表,使用该extend()方法。

In [29]: b = ["a",12,3,"s","d"]

In [30]: a
Out[30]: [1, 123142, 2, 3, 1, 3, 1111]

In [31]: a.extend(b)

In [32]: a
Out[32]: [1, 123142, 2, 3, 1, 3, 1111, 'a', 12, 3, 's', 'd']

extend不仅仅可以添加列表,也是可以添加其他的类型,字典或者元组、集合

In [30]: a
Out[30]: [1, 123142, 2, 3, 1, 3, 1111]

In [31]: a.extend(b)

In [32]: a
Out[32]: [1, 123142, 2, 3, 1, 3, 1111, 'a', 12, 3, 's', 'd']

In [33]: c = {"ad","asd","3erwx"}

In [34]: a.extend(c)  

In [35]: a
Out[35]: [1, 123142, 2, 3, 1, 3, 1111, 'a', 12, 3, 's', 'd', 'asd', 'ad', '3erwx']

删除列表

remove移除列表元素

In [37]: thislist = ["apple", "banana", "cherry"]
    ...: thislist.remove("banana")
    ...: print(thislist)
['apple', 'cherry']

pop()删除指定索引

In [38]: #该pop()方法删除指定的索引。
    ...: thislist = ["apple", "banana", "cherry"]
    ...: thislist.pop(1)
    ...: print(thislist)
['apple', 'cherry']

如果不指定索引,pop()默认是删除最后一项

In [44]: a
Out[44]: [1, 2, 3, 1, 3, 1111, 'a', 12, 3, 's', 'd', 'asd', 'ad', '3erwx']

In [45]: a.pop(1)
Out[45]: 2

In [46]: a
Out[46]: [1, 3, 1, 3, 1111, 'a', 12, 3, 's', 'd', 'asd', 'ad', '3erwx']

In [47]: a.pop
Out[47]: <function list.pop(index=-1, /)>

In [48]: a.pop()
Out[48]: '3erwx'

In [49]: a
Out[49]: [1, 3, 1, 3, 1111, 'a', 12, 3, 's', 'd', 'asd', 'ad']

del关键字也可以删除指定列表索引 — 甚至是整个列表

In [50]: thislist = ["apple", "banana", "cherry"]
    ...: del thislist[0]
    ...: print(thislist)
['banana', 'cherry']

In [51]: thislist = ["apple", "banana", "cherry"]
    ...: del thislist
    ...: print(thislist)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Input In [51], in <cell line: 3>()
      1 thislist = ["apple", "banana", "cherry"]
      2 del thislist
----> 3 print(thislist)

NameError: name 'thislist' is not defined # 不存在 -- 被删除了

char()方式清除整个列表元素

In [52]: thislist = ["apple", "banana", "cherry"]
    ...: thislist.clear()
    ...: print(thislist)
[]

for打印列表

In [56]: for s in a:
    ...:     print(s)
    ...:
    ...:
1
3
1
3
1111
a
12
3
s
d
asd
ad

In [57]: for s in range(len(a)):
    ...:     print(a[s])
    ...:
1
3
1
3
1111
a
12
3
s
d
asd
ad

使用 While 循环

您可以使用循环遍历列表项while

使用该len()函数确定列表的长度,然后从 0 开始并通过引用它们的索引来循环遍历列表项。记住在每次迭代后将索引增加 1。

打印所有项目,使用while循环遍历所有索引号

In [58]: thislist = ["apple", "banana", "cherry"]
    ...: i = 0
    ...: while i < len(thislist):
    ...:  print(thislist[i])
    ...:  i = i + 1
    ...:
apple
banana
cherry

基于现有的列表创建一个列表

怎么样用现有的列表更方便快速的新建一个列表,python提供了一个机制

In [59]: fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
    ...: newlist = []
    ...:
    ...: for x in fruits:
    ...:   if "a" in x:
    ...:     newlist.append(x)
    ...:
    ...: print(newlist)
['apple', 'banana', 'mango']

In [60]: fruits
Out[60]: ['apple', 'banana', 'cherry', 'kiwi', 'mango']

也可

In [81]: fruits
Out[81]: ['apple', 'banana', 'cherry', 'kiwi', 'mango']

In [82]: newlist = [x for x in fruits if "a" in x]  # 新语法

In [83]: newlist
Out[83]: ['apple', 'banana', 'mango']

语法

newlist = [expression for item in iterable if condition == True]

返回值是一个新列表,保持旧列表不变。

条件就像一个过滤器,只接受评估为 的 项目True

只接受不是“苹果”的物品:

newlist = [x for x in fruits if x != "apple"]

可以使用该range()函数创建一个可迭代对象:

In [84]: newlist = [x for x in range(10)]
In [85]: newlist
Out[85]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [102]: newlist = [x for x in range(0,10,1)]

In [103]: newlist
Out[103]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [104]: newlist = [x for x in range(0,10,2)]

In [105]: newlist
Out[105]: [0, 2, 4, 6, 8]

只接受小于 5 的数字:

newlist = [x for x in range(10) if x < 5]

排序

升序

thislist = ["orange", "mango", "kiwi", "pineapple", "banana"]
thislist.sort()
print(thislist)

降序

thislist = ["orange", "mango", "kiwi", "pineapple", "banana"]
thislist.sort(reverse = True)
print(thislist)

案例

In [110]: a = [x for x in range(10)]

In [111]: a			   # 降序
Out[111]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [112]: a.sort(reverse=True)

In [113]: a
Out[113]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

In [114]: a.sort()		# 升序

In [115]: a
Out[115]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

自定义排序

除了顺序和逆序,还可以自定义排序

In [115]: a
Out[115]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [116]: def a(n):
     ...:     return abs(n - 50)
     ...:

In [117]: a(1)
Out[117]: 49

In [118]: a(4)
Out[118]: 46

In [119]: a(4.12)
Out[119]: 45.88

In [120]: b = [x for x in range(10)]

In [121]: v
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Input In [121], in <cell line: 1>()
----> 1 v

NameError: name 'v' is not defined

In [122]: b
Out[122]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [123]: b.sort(key = a)

In [124]: b
Out[124]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

不区分大小写的排序

thislist = ["banana", "Orange", "Kiwi", "cherry"]
thislist.sort()
print(thislist)

复制列表

或许我们很容易想到使用

List_a = List_b

来排序,这个是不对的,列表是引用传递:在其它语言中我们知道,引用传递的时候,当我们修改List_b的值,List_a也会被修改。

有多种方法可以进行复制,一种方法是使用内置的 List 方法 copy()

thislist = ["apple", "banana", "cherry"]
mylist = thislist.copy()
print(mylist)

使用list方法制作列表的副本list()

thislist = ["apple", "banana", "cherry"]
mylist = list(thislist)
print(mylist)

案例:

In [127]: a
Out[127]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

In [128]: a[1]=1

In [129]: a
Out[129]: [9, 1, 7, 6, 5, 4, 3, 2, 1, 0]

In [130]: b
Out[130]: [9, 1, 7, 6, 5, 4, 3, 2, 1, 0]

In [131]: c = a.copy()

In [132]: c
Out[132]: [9, 1, 7, 6, 5, 4, 3, 2, 1, 0]

In [133]: c[1]=13

In [134]: c
Out[134]: [9, 13, 7, 6, 5, 4, 3, 2, 1, 0]

In [135]: a
Out[135]: [9, 1, 7, 6, 5, 4, 3, 2, 1, 0]

连接列表

在 Python 中有几种方法可以连接或连接两个或多个列表。

最简单的方法之一是使用+ 运算符。

加入两个列表:

list1 = ["a", "b", "c"]
list2 = [1, 2, 3]

list3 = list1 + list2
print(list3)

连接两个列表的另一种方法是将 list2 中的所有项目逐个附加到 list1 中:

list1 = ["a", "b" , "c"]
list2 = [1, 2, 3]

for x in list2:
 list1.append(x)

print(list1)

也可以使用该extend() 方法,其目的是将一个列表中的元素添加到另一个列表中:

In [144]: list1 = ["a", "b" , "c"]
     ...: list2 = [1, 2, 3]
     ...:
     ...: list1.extend(list2)
     ...: print(list1)
['a', 'b', 'c', 1, 2, 3]

END 链接