我有两个列表:
wordlist = ['A', 'Aani', 'Aaron', 'Aaronic',
'Aaronical', 'Aaronite', 'Aaronitic',
'Aaru', 'Ab', 'Ababdeh']
和
wordlist_compound = [['A','0'], ['Aaronic','1'], ['Key','2'],
['Aaronical','3'], ['Aaronite','4'], ['Yes','5']]
我想取两个单词的交集,并制作一个列表,其中包含第三个列表 wordlist_final 中的单词、数字组合数字,这样 wordlist_final 看起来像:
[['A','0'], ['Aaronic','1'], ['Aaronical','3'], ['Aaronite','4']]
我当前的代码如下:
wordlist_final = []
for index, word in enumerate(wordlist):
for word_comp in wordlist_compound:
if word[index] == wordlist_compound[index][0]:
wordlist_final.append(wordlist_compound[index])
但我收到“字符串索引超出范围错误”
最佳答案
使用列表推导式可以轻松完成输出:
wl=['A', 'Aani', 'Aaron', 'Aaronic', 'Aaronical', 'Aaronite', 'Aaronitic', 'Aaru', 'Ab', 'Ababdeh']
wlc=[['A','0'], ['Aaronic','1'], ['Key','2'], ['Aaronical','3'], ['Aaronite','4'], ['Yes','5']]
print [[word, i] for word,i in wlc if word in wl]
# [['A', '0'], ['Aaronic', '1'], ['Aaronical', '3'], ['Aaronite', '4']]
替代信用证:
print [li for li in wlc if li[0] in wl]
如果你想要一个循环结构:
wlf = []
for word, i in wlc:
if word in wl:
wlf.append([word,i])
print wlf
# [['A', '0'], ['Aaronic', '1'], ['Aaronical', '3'], ['Aaronite', '4']]
Python 序列通常不需要枚举来处理序列中的对象。您通常只需要使用enumerate
,如果除了序列本身之外还有关于索引或顺序的“数据”。
在这里,您将获取 wordlist_compound
中的每个元素,并测试 wordlist
中单词的成员资格。无需枚举。如果你反转循环,你也大大简化了任务;在 wordlist_compound
上循环,而不是像在外循环中那样在 wordlist
上循环。您的输出是 wordlist_compound
中元素的过滤器;当然,这意味着您也可以使用 filter
:
print filter(lambda li: li[0] in wl, wlc)
# [['A', '0'], ['Aaronic', '1'], ['Aaronical', '3'], ['Aaronite', '4']]
干杯。
关于python - 列表与列表列表的第一个元素之间的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20597540/