# Python 列表

> 原文： [https://javabeginnerstutorial.com/python-tutorial/python-list-2/](https://javabeginnerstutorial.com/python-tutorial/python-list-2/)

我们已经知道 python 列表可以用方括号之间的逗号分隔值编写，并且元素不必来自同一类型。 如果您倾向于忘记此功能，那么后者自然会引起一些混乱和错误。

```java
>>> [1, 'Python', 3.14]
[1, 'Python', 3.14]
```

### 访问 python 列表中的元素

访问列表中的值需要使用它们的索引。 索引是分配给元素的数字，也称为元素的位置。 索引以 0 开头。您可以访问列表或一系列条目中的一个条目。

```java
>>> a = [1,2,3,4,5]
>>> a[2]
3
>>> a[1:3]
[2, 3]
```

如果尝试访问未填充的索引（该索引不包含任何值），则会收到`IndexError`。

```java
>>> a = []
>>> a[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
```

但是，如果您对不包含索引的列表进行切片，就不会出现错误，而只是一个值比您期望的少的列表（或者当然是一个空列表）：

```java
>>> a = [1,2,3,4,5]
>>> a[:7]
[1, 2, 3, 4, 5]
>>> a[6:7]
[]
>>> a[8:]
[]
```

### 将新元素添加到 python 列表

大多数情况下，您没有可用于构建列表的预定义值。 因此，必须在列表中添加元素。

有很多方法。 一种是使用`append`函数，该函数将**一个元素**附加到列表的末尾。 请注意，这是一个要素。 为什么？ 您将很快在示例中看到。

第二种方法是使用切片。 这样，您可以将新元素添加到列表中（或替换当前存在的元素）。 在这种情况下，您必须使用列表作为操作的右侧。 同样，**使用此方法时要小心**，因为如果从错误的位置进行切片，最终可能会丢失当前内容。

而且，如果要将列表附加到列表的末尾，则必须使用需要将 iterable 作为参数的扩展功能-否则可以使用串联。 串联与我们在字符串中学到的相同：加号（`+`）。

将元素插入列表开头的最佳方法是对[：0]使用切片。 这会将元素插入列表的开头。

如果必须在给定索引处将元素插入列表中的某处，请使用具有两个参数的列表插入功能：插入位置的索引和要插入的对象。 如果索引被某个值占用，则新对象将在给定索引处插入此值之前。 如果未占用索引，则将对象附加到列表。

```java
>>> a = []
>>> a[0] = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> a.append(2)
>>> a
[2]
>>> a[1:2] = [1]
>>> a
[2, 1]
>>> a[1:3] = [1]
>>> a
[2, 1]
>>> a[1:2] = [3,4,5,6]
>>> a
[2, 3, 4, 5, 6]
>>> a[:] = [2]
>>> a
[2]
>>> a[0:] = [1]
>>> a
[1]
>>> a.extend([2,3,4,5])
>>> a
[1, 2, 3, 4, 5]
>>> a.append([6,7,8])
>>> a
[1, 2, 3, 4, 5, [6, 7, 8]]
>>> a[:0] = [9]
>>> a
[9, 1, 2, 3, 4, 5, [6, 7, 8]]
>>> a[:0] = [10,11,12]
>>> a
[10, 11, 12, 9, 1, 2, 3, 4, 5, [6, 7, 8]]
>>> a += [13,14,15]
>>> a
[10, 11, 12, 9, 1, 2, 3, 4, 5, [6, 7, 8], 13, 14, 15]
>>> a = []
>>> a.insert(2,1)
>>> a
[1]
>>> a.insert(2,2)
>>> a
[1, 2]
>>> a.insert(2,3)
>>> a
[1, 2, 3]
>>> a.insert(2,4)
>>> a
[1, 2, 4, 3]
```

如您所见，将列表追加到列表会在末尾插入整个列表，而不是所提供列表的值。 因此，在这种情况下，请小心并使用扩展。

### 更新 python 列表中的元素

如您所知，您可以通过列表中的元素的索引来更新它。 再次：如果您尝试访问当前未填充的索引，则会收到`IndexError`。

```java
>>> a = ["Java", "is", "cool!"]
>>> a
['Java', 'is', 'cool!']
>>> a[0] = 'Python'
>>> a
['Python', 'is', 'cool!']
```

### 从列表中删除元素

有时您需要从列表中删除一个元素，因为不再需要它，或者您只是在该位置放置了错误的元素。 还有一些方法可以从列表中删除元素。

首先，您可以使用`del`语句。 由于它适用于变量，因此适用于整个列表（因为它们是变量）和列表元素。 *请记住*，如果您删除列表变量，则在不重新分配的情况下将无法访问该列表。

另一种方法是从列表中弹出一个元素。 `pop`函数采用一个可选参数，该参数是要删除的索引。 如果不提供此参数，则最后一个元素将被删除。 `del`和`pop`之间用法的核心区别在于`pop`返回已删除的元素，因此您可以实际使用它。

```java
>>> a = [1, 2, 3, 4, 5, [6, 7, 8]]
>>> a
[1, 2, 3, 4, 5, [6, 7, 8]]
>>> del a[5]
>>> a
[1, 2, 3, 4, 5]
>>> a.pop(3)
4
>>> a.pop()
5
>>> a
[1, 2, 3]
```

如果要从列表中删除所有元素，可以使用新的空列表重新分配列表，或使用列表的清除功能。

这两种方法的区别在于，第一种方法确实在内存中留下了一些占用空间，并且列表的 ID 发生了变化，而清除列表则保留了 ID（内存位置）。

```java
>>> a = [1, 2, 3, 4, 5, [6, 7, 8]]
>>> id(a)
4335030344
>>> a = []
>>> id(a)
4334935560
>>> b = [1, 2, 3, 4, 5, [6, 7, 8]]
>>> id(b)
4335073672
>>> b.clear()
>>> id(b)
4335073672
```

### 其他基本列表操作

您要在编程中使用的列表上的另外两个基本运算符是确定列表的长度，并使用给定的值初始化给定长度的列表。

第一个问题是众所周知的，第二个问题在进行动态编程或要从一种使用初始化的编程语言中迁移算法时最常见。

```java
>>> a = [1, 2, 3, 4, 5]
>>> len(a) # returns the length of the given list
5
>>> a = ["Hello!"]*4 # creates a list with the element repeated 4 times
>>> a
['Hello!', 'Hello!', 'Hello!', 'Hello!']
```

So what next? Lets Learn [Python 3 Set](https://javabeginnerstutorial.com/python-tutorial/python-3-set-2/). 🙂

