Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用仅包含项的另一个列表来子集项:值列表?_Python_List_List Comprehension_Word Cloud - Fatal编程技术网

Python 如何使用仅包含项的另一个列表来子集项:值列表?

Python 如何使用仅包含项的另一个列表来子集项:值列表?,python,list,list-comprehension,word-cloud,Python,List,List Comprehension,Word Cloud,我有两张清单。一个是单词及其频率列表,另一个是单词列表 a = [('country',3478), ('island',2900),('river',5)] b = ['river','mountain','bank'] a中有数千个条目,但b中只有数百个条目 如何将列表子集a返回: c=[('river',5)] 对于循环来说,考虑到条目的数量,需要花费太长的时间,我认为列表理解是解决方案,但无法正确执行 我的主要目标是用我的最终列表创建一个wordcloud。任何帮助都将不胜感激

我有两张清单。一个是单词及其频率列表,另一个是单词列表

a = [('country',3478), ('island',2900),('river',5)] 
b = ['river','mountain','bank'] 
a中有数千个条目,但b中只有数百个条目

如何将列表子集a返回:

c=[('river',5)]
对于循环来说,考虑到条目的数量,需要花费太长的时间,我认为列表理解是解决方案,但无法正确执行

我的主要目标是用我的最终列表创建一个wordcloud。任何帮助都将不胜感激


**编辑是因为我犯了一些评论指出的错误。我想回去

c=[('river',5)]
而不是

c=['river',5]

正如我最初写的那样。抱歉并感谢您指出这一点

我想您确实想要:

c = [('river',5)]  # a list with one tuple
最好先在
b
中构造一组值:

bd = set(b)
然后您可以使用列表理解:

c = [(x,y) for x,y in a if x in bd]
也就是说,如果你想查找一个单词的频率,我建议你不要构建一个元组列表,而是一个字典。您可以通过字典理解来实现这一点:

c = [(x,y) for x,y in a if x in bd]
您可以尝试以下方法:

a = [('country',3478), ('island',2900),('river',5)] 
b = ['river','mountain','bank'] 
final_data = list([i for i in a if i[0] in b][0])
输出:

['river', 5]

您可能希望将其作为单个元组返回?列表理解的速度与循环相同。如果希望更快地查找,则需要使用
dict
而不是元组列表。