返回介绍

01. Python 工具

02. Python 基础

03. Numpy

04. Scipy

05. Python 进阶

06. Matplotlib

07. 使用其他语言进行扩展

08. 面向对象编程

09. Theano 基础

10. 有趣的第三方模块

11. 有用的工具

12. Pandas

列表

发布于 2022-09-03 20:46:12 字数 15272 浏览 0 评论 0 收藏 0

Python中,列表是一个有序的序列。

列表用一对 [] 生成,中间的元素用 , 隔开,其中的元素不需要是同一类型,同时列表的长度也不固定。

In [1]:

l = [1, 2.0, 'hello']
print l
[1, 2.0, 'hello']

空列表可以用 [] 或者 list() 生成:

In [2]:

empty_list = []
empty_list

Out[2]:

[]

In [3]:

empty_list = list()
empty_list

Out[3]:

[]

列表操作

与字符串类似,列表也支持以下的操作:

长度

len 查看列表长度:

In [4]:

len(l)

Out[4]:

3

加法和乘法

列表加法,相当于将两个列表按顺序连接:

In [5]:

a = [1, 2, 3]
b = [3.2, 'hello']
a + b

Out[5]:

[1, 2, 3, 3.2, 'hello']

列表与整数相乘,相当于将列表重复相加:

In [6]:

l * 2

Out[6]:

[1, 2.0, 'hello', 1, 2.0, 'hello']

索引和分片

列表和字符串一样可以通过索引和分片来查看它的元素。

索引:

In [7]:

a = [10, 11, 12, 13, 14]
a[0]

Out[7]:

10

反向索引:

In [8]:

a[-1]

Out[8]:

14

分片:

In [9]:

a[2:-1]

Out[9]:

[12, 13]

与字符串不同的是,列表可以通过索引和分片来修改。

对于字符串,如果我们通过索引或者分片来修改,Python会报错:

In [10]:

s = "hello world"
# 把开头的 h 改成大写
s[0] = 'H'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-844622ced67a> in <module>()
 1 s = "hello world"
 2 # 把开头的 h 改成大写
----> 3  s[0] = 'H'

TypeError: 'str' object does not support item assignment

而这种操作对于列表来说是可以的:

In [11]:

a = [10, 11, 12, 13, 14]
a[0] = 100
print a
[100, 11, 12, 13, 14]

这种赋值也适用于分片,例如,将列表的第2,3两个元素换掉:

In [12]:

a[1:3] = [1, 2]
a

Out[12]:

[100, 1, 2, 13, 14]

事实上,对于连续的分片(即步长为 1 ),Python采用的是整段替换的方法,两者的元素个数并不需要相同,例如,将 [11,12] 替换为 [1,2,3,4]

In [13]:

a = [10, 11, 12, 13, 14]
a[1:3] = [1, 2, 3, 4]
print a
[10, 1, 2, 3, 4, 13, 14]

这意味着,可以用这种方法来删除列表中一个连续的分片:

In [14]:

a = [10, 1, 2, 11, 12]
print a[1:3]
a[1:3] = []
print a
[1, 2]
[10, 11, 12]

对于不连续(间隔step不为1)的片段进行修改时,两者的元素数目必须一致:

In [15]:

a = [10, 11, 12, 13, 14]
a[::2] = [1, 2, 3]
a

Out[15]:

[1, 11, 2, 13, 3]

否则会报错:

In [16]:

a[::2] = []
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-7b6c4e43a9fa> in <module>()
----> 1  a[::2] = []

ValueError: attempt to assign sequence of size 0 to extended slice of size 3

删除元素

Python提供了删除列表中元素的方法 'del'。

删除列表中的第一个元素:

In [17]:

a = [1002, 'a', 'b', 'c']
del a[0]
print a
['a', 'b', 'c']

删除第2到最后一个元素:

In [18]:

a = [1002, 'a', 'b', 'c']
del a[1:]
a

Out[18]:

[1002]

删除间隔的元素:

In [19]:

a = ['a', 1, 'b', 2, 'c']
del a[::2]
a

Out[19]:

[1, 2]

测试从属关系

in 来看某个元素是否在某个序列(不仅仅是列表)中,用not in来判断是否不在某个序列中。

In [20]:

a = [10, 11, 12, 13, 14]
print 10 in a
print 10 not in a
True
False

也可以作用于字符串:

In [21]:

s = 'hello world'
print 'he' in s
print 'world' not in s
True
False

列表中可以包含各种对象,甚至可以包含列表:

In [22]:

a = [10, 'eleven', [12, 13]]
a[2]

Out[22]:

[12, 13]

a[2]是列表,可以对它再进行索引:

In [23]:

a[2][1]

Out[23]:

13

列表方法

不改变列表的方法

列表中某个元素个数count

l.count(ob) 返回列表中元素 ob 出现的次数。

In [24]:

a = [11, 12, 13, 12, 11]
a.count(11)

Out[24]:

2

列表中某个元素位置index

l.index(ob) 返回列表中元素 ob 第一次出现的索引位置,如果 ob 不在 l 中会报错。

In [25]:

a.index(12)

Out[25]:

1

不存在的元素会报错:

In [26]:

a.index(1)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-ed16592c2786> in <module>()
----> 1  a.index(1)

ValueError: 1 is not in list

改变列表的方法

向列表添加单个元素

l.append(ob) 将元素 ob 添加到列表 l 的最后。

In [27]:

a = [10, 11, 12]
a.append(11)
print a
[10, 11, 12, 11]

append每次只添加一个元素,并不会因为这个元素是序列而将其展开:

In [28]:

a.append([11, 12])
print a
[10, 11, 12, 11, [11, 12]]

向列表添加序列

l.extend(lst) 将序列 lst 的元素依次添加到列表 l 的最后,作用相当于 l += lst

In [29]:

a = [10, 11, 12, 11]
a.extend([1, 2])
print a
[10, 11, 12, 11, 1, 2]

插入元素

l.insert(idx, ob) 在索引 idx 处插入 ob ,之后的元素依次后移。

In [30]:

a = [10, 11, 12, 13, 11]
# 在索引 3 插入 'a'
a.insert(3, 'a')
print a
[10, 11, 12, 'a', 13, 11]

移除元素

l.remove(ob) 会将列表中第一个出现的 ob 删除,如果 ob 不在 l 中会报错。

In [31]:

a = [10, 11, 12, 13, 11]
# 移除了第一个 11
a.remove(11)
print a
[10, 12, 13, 11]

弹出元素

l.pop(idx) 会将索引 idx 处的元素删除,并返回这个元素。

In [32]:

a = [10, 11, 12, 13, 11]
a.pop(2)

Out[32]:

12

排序

l.sort() 会将列表中的元素按照一定的规则排序:

In [33]:

a = [10, 1, 11, 13, 11, 2]
a.sort()
print a
[1, 2, 10, 11, 11, 13]

如果不想改变原来列表中的值,可以使用 sorted 函数:

In [34]:

a = [10, 1, 11, 13, 11, 2]
b = sorted(a)
print a
print b
[10, 1, 11, 13, 11, 2]
[1, 2, 10, 11, 11, 13]

列表反向

l.reverse() 会将列表中的元素从后向前排列。

In [35]:

a = [1, 2, 3, 4, 5, 6]
a.reverse()
print a
[6, 5, 4, 3, 2, 1]

如果不想改变原来列表中的值,可以使用这样的方法:

In [36]:

a = [1, 2, 3, 4, 5, 6]
b = a[::-1]
print a
print b
[1, 2, 3, 4, 5, 6]
[6, 5, 4, 3, 2, 1]

如果不清楚用法,可以查看帮助:

In [ ]:

a.sort?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文