python - 删除 Python 列表元素

标签 python list

我有两个列表,

l1 = [1,2,3,4,5,6]
l2 = [3,2]

我想要的是删除列表 l1 中 l2 中的元素,为此我做了类似的事情,

for x in l1:
    if x in l2:
        l1.remove(x)

它给出类似的输出

[1, 3, 4, 5, 6]

但是输出应该是这样的

[1, 4, 5, 6]

谁能阐明这一点。

最佳答案

这很容易解释。

考虑您拥有的第一个数组:

| 1 | 2 | 3 | 4 | 5 | 6 |

现在开始迭代

| 1 | 2 | 3 | 4 | 5 | 6 |
  ^

什么都没发生,迭代器递增

| 1 | 2 | 3 | 4 | 5 | 6 |
      ^

2 被移除

| 1 | 3 | 4 | 5 | 6 |
      ^

迭代器增量

| 1 | 3 | 4 | 5 | 6 |
          ^

瞧,3 还在那里。

解决方案是迭代向量的副本,例如

for x in l1[:]: <- slice on entire array
    if x in l2:
        l1.remove(x)

或反向迭代:

for x in reversed(l1):
    if x in l2:
        l1.remove(x)

它的作用是这样的:

| 1 | 2 | 3 | 4 | 5 | 6 |
              ^

| 1 | 2 | 3 | 4 | 5 | 6 |
          ^

| 1 | 2 | 4 | 5 | 6 |
          ^

| 1 | 2 | 4 | 5 | 6 |
      ^

| 1 | 4 | 5 | 6 |
      ^

| 1 | 4 | 5 | 6 |
  ^

关于python - 删除 Python 列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12840747/

相关文章:

python - 查找数据框中每一行的前 N ​​列

python - 如何将数据框行分组到 Pandas groupby 中的列表中

python - 我如何将这个列表变成 python 中的字符串?

java - 从列表中删除条目?

python - 如何从 python 提示符执行(而不是导入)python 脚本?

python - 如何使用新的 pandas DataFrame 更新 Azure ML 数据集以及如何在需要时恢复到特定版本

python - 如何替换 bool 列表序列中的值?

Java List.add() UnsupportedOperationException

python - 使用 'tarfile' 时跳过损坏的文件 (.tar.gz)

python - swig c++ 到 python 通过引用返回 unsigned char*