python - 保留列表中的确切单词并删除其他单词

标签 python python-3.x list

这里我有一个列表 a 和另一个包含一些字符串的列表 b。对于列表 a 中的字符串,我想保留出现在列表 b 中的字符串。并删除列表 b 中没有出现的其他字符串。

例如:

list_a = [['a','a','a','b','b','b','g','b','b','b'],['c','we','c','c','c','c','c','a','b','a','b','a','b','a','b']]
list_b = ['a']

我期望的结果是:

像这样获取 list_a:[['a','a','a'],['a','a','a','a']]

但是,当我运行我的代码时:

data = [['a','a','a','b','g','b'],['we','c','a','b','a','a','b','a','b']]
keep_words = ['a']
for document in data:
    print('######')
    for word in document:
        print(word)
        if word in keep_words:
            document.remove(word)
            print(document)
print('#####')
print(data)

我得到这个结果:

line 1:######
line 2:a
line 3:['a', 'a', 'b', 'g', 'b']
line 4:a
line 5:['a', 'b', 'g', 'b']
line 6:g
line 7:b
line 8:######
line 9:we
line 10:c
line 11:a
line 12:['we', 'c', 'b', 'a', 'a', 'b', 'a', 'b']
line 13:a
line 14:['we', 'c', 'b', 'a', 'b', 'a', 'b']
line 15:b
line 16:a
line 17:['we', 'c', 'b', 'b', 'a', 'b']
line 18:#####
line 19:[['a', 'b', 'g', 'b'], ['we', 'c', 'b', 'b', 'a', 'b']]

所以我很困惑: 为什么在第 6 行,它打印出单词“g”而不是单词“a”?因为在第 5 行我们得到了一个列表 ['a', 'b', 'g', 'b'],所以在接下来的 for 循环中,它应该得到这个列表开头的单词 'a'。

谁能告诉我为什么会这样以及如何解决我的问题?非常感谢!

* Attached picture is my code and my result

最佳答案

在遍历数组时切勿从数组中删除元素,这是解决您的问题的方法,涉及用所需结果替换子列表(过滤):

data = [['a','a','a','b','g','b'],['we','c','a','b','a','a','b','a','b']]
keep_words = ['a']

for i in range(len(data)):
  data[i] = [d for d in data[i] if d in keep_words] # only keep desired data

print(data) # ==> [['a', 'a', 'a'], ['a', 'a', 'a', 'a']]

关于python - 保留列表中的确切单词并删除其他单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173225/

相关文章:

python - 简单非本地绑定(bind)的 NameError

python - 使用月份过滤器时 Django 错误

python-3.x - 如何从 pytest 引用我的 Azure 函数?

python - 是否可以从describe_instances()输出创建EC2实例?

C++ STL 列出两个结构交叉引用

python - 为什么我的代码无法使日期时间对象识别时区?

python - 我已经设置了模板目录,但仍然有错误

python - 使用正则表达式查找 1 个字母和 2 个数字

python - 计算Python列表中值频率的最有效方法?

java - 从 Excel 中读取几列/行数据并获取列表