您当前位置:首页 > 深入 Python > 内置数据类型 > 列表简介 | << >> | ||||
深入 Python从 Python 新手到专家 |
列表是 Python 的主力数据类型。如果您对列表的唯一经验是 Visual Basic 中的数组或(上帝保佑)Powerbuilder 中的数据存储,请准备好迎接 Python 列表。
![]() |
|
Python 中的列表类似于 Perl 中的数组。在 Perl 中,存储数组的变量始终以 @ 字符开头;在 Python 中,变量可以任意命名,Python 会在内部跟踪数据类型。 |
![]() |
|
Python 中的列表比 Java 中的数组强大得多(尽管如果您真的只想使用数组的功能,它也可以用作数组)。一个更好的类比是 ArrayList 类,它可以容纳任意对象,并且可以在添加新项目时动态扩展。 |
>>> li = ["a", "b", "mpilgrim", "z", "example"]>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[0]
'a' >>> li[4]
'example'
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[-1]'example' >>> li[-3]
'mpilgrim'
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[1:3]['b', 'mpilgrim'] >>> li[1:-1]
['b', 'mpilgrim', 'z'] >>> li[0:3]
['a', 'b', 'mpilgrim']
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[:3]['a', 'b', 'mpilgrim'] >>> li[3:]
![]()
['z', 'example'] >>> li[:]
['a', 'b', 'mpilgrim', 'z', 'example']
![]() |
如果左切片索引为 0,则可以将其省略,并隐含为 0。因此,li[:3] 与示例 3.8“切片列表” 中的 li[0:3] 相同。 |
![]() |
同样,如果右切片索引是列表的长度,则可以将其省略。因此,li[3:] 与 li[3:5] 相同,因为此列表有五个元素。 |
![]() |
请注意此处的对称性。在这个五元素列表中,li[:3] 返回前 3 个元素,li[3:] 返回最后两个元素。实际上,无论列表的长度如何,li[:n] 始终返回前 n 个元素,li[n:] 始终返回其余元素。 |
![]() |
如果两个切片索引都省略,则包含列表的所有元素。但这与原始的 li 列表不同;它是一个恰好具有所有相同元素的新列表。li[:] 是创建列表完整副本的简写。 |
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li.append("new")>>> li ['a', 'b', 'mpilgrim', 'z', 'example', 'new'] >>> li.insert(2, "new")
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new'] >>> li.extend(["two", "elements"])
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li = ['a', 'b', 'c'] >>> li.extend(['d', 'e', 'f'])>>> li ['a', 'b', 'c', 'd', 'e', 'f'] >>> len(li)
6 >>> li[-1] 'f' >>> li = ['a', 'b', 'c'] >>> li.append(['d', 'e', 'f'])
>>> li ['a', 'b', 'c', ['d', 'e', 'f']] >>> len(li)
4 >>> li[-1] ['d', 'e', 'f']
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements'] >>> li.index("example")5 >>> li.index("new")
2 >>> li.index("c")
Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.index(x): x not in list >>> "c" in li
False
![]() |
|
在 2.2.1 版之前,Python 没有单独的布尔数据类型。为了弥补这一点,Python 接受布尔上下文(如 if 语句)中的几乎所有内容,具体规则如下:
|
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements'] >>> li.remove("z")>>> li ['a', 'b', 'new', 'mpilgrim', 'example', 'new', 'two', 'elements'] >>> li.remove("new")
>>> li ['a', 'b', 'mpilgrim', 'example', 'new', 'two', 'elements'] >>> li.remove("c")
Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.remove(x): x not in list >>> li.pop()
'elements' >>> li ['a', 'b', 'mpilgrim', 'example', 'new', 'two']
>>> li = ['a', 'b', 'mpilgrim'] >>> li = li + ['example', 'new']>>> li ['a', 'b', 'mpilgrim', 'example', 'new'] >>> li += ['two']
>>> li ['a', 'b', 'mpilgrim', 'example', 'new', 'two'] >>> li = [1, 2] * 3
>>> li [1, 2, 1, 2, 1, 2]
![]() |
列表也可以使用 + 运算符进行连接。list = list + otherlist 与 list.extend(otherlist) 具有相同的结果。但是,+ 运算符返回一个新的(连接的)列表作为值,而 extend 仅更改现有列表。这意味着 extend 更快,尤其是对于大型列表。 |
![]() |
Python 支持 += 运算符。li += ['two'] 等效于 li.extend(['two'])。+= 运算符适用于列表、字符串和整数,并且可以重载以适用于用户定义的类。(有关类的更多信息,请参见第 5 章。) |
![]() |
* 运算符作用于列表时,相当于一个重复器。 li = [1, 2] * 3 等价于 li = [1, 2] + [1, 2] + [1, 2],即将三个列表连接成一个。 |
<< 原生数据类型 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
元组简介 >> |