Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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_Intersection_Enumerate - Fatal编程技术网

Python 列表和列表列表的第一个元素之间的交集

Python 列表和列表列表的第一个元素之间的交集,python,list,intersection,enumerate,Python,List,Intersection,Enumerate,我有两份清单: wordlist = ['A', 'Aani', 'Aaron', 'Aaronic', 'Aaronical', 'Aaronite', 'Aaronitic', 'Aaru', 'Ab', 'Ababdeh'] 及 我想取这两个单词的交叉点,制作一个列表,其中包含第三个列表中的单词、数字组合数字wordlist_final,这样wordlist_final看起来像: [['A','0'], ['Aaronic','1']

我有两份清单:

wordlist =  ['A', 'Aani', 'Aaron', 'Aaronic',
             'Aaronical', 'Aaronite', 'Aaronitic',
             'Aaru', 'Ab', 'Ababdeh']

我想取这两个单词的交叉点,制作一个列表,其中包含第三个列表中的单词、数字组合数字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])
我当前的代码如下所示:

[['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])
但我得到一个“字符串索引超出范围错误”

我相信这是必须的

if word == wordlist_compound[index][0]:
您在元素
'Aaru'
上得到此异常:其索引是
7
,并且
'Aaru'[7]
不存在

但是这个观察对您没有帮助,因为您的循环包含一些逻辑错误。我会这样重写它:

for inner_list in wordlist_compound: 
    if inner_list[0] in wordlist: 
        wordlist_final.append(inner_list) 

或者使用列表理解,例如。

使用列表理解可以轻松完成输出:

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序列通常不需要枚举来处理序列中的对象。如果索引或顺序中除了序列本身之外还有“数据”,则通常只需要使用
枚举

在这里,您将获取
wordlist\u composite
中的每个元素,并测试
wordlist
中单词的成员资格。不需要枚举。如果您反转循环,您也可以大大简化任务;循环使用
wordlist\u composite
,而不是在外部循环中循环使用
wordlist
。您的输出是
wordlist_component
中元素的过滤器;当然,这意味着您也可以使用
filter

print filter(lambda li: li[0] in wl, wlc)
# [['A', '0'], ['Aaronic', '1'], ['Aaronical', '3'], ['Aaronite', '4']]

干杯。

问题是
len(wordlist)>len(wordlist\u component)
,因此使用
wordlist
索引
wordlist\u component
将给出索引越界错误


另外,正如@aga所提到的,如果word==wordlist\u component[index][0]
根据两个集合的大小,我可能会这样做:

word_numbers = dict(wordlist_compound)
wordlist_final = [(word, word_numbers[word]) for word in wordlist if word in word_numbers]
如果您不关心结果的顺序(或者如果两个列表的顺序相同,在本例中为字母顺序),那么您可以改为:

words = set(wordlist)
wordlist_final = [p for p in wordlist_compound if p[0] in words]
如果
wordlist\u component
可能比
wordlist
大得多,那么这将是更好的选择


我刚刚注意到,在这两种情况下,我都返回了一个元组列表,而您有一个列表列表。如果有必要,您可以通过在我的第一个代码块中将
()
更改为
[]
,或者在第二个代码块中将
p更改为
list(p)for p

enumerate
到达
7,'Aaru'
并尝试计算
word[index]
时,您将得到“字符串索引超出范围”。无论您认为
索引
代表什么,请再次查看。此外,您的代码在单词列表中为单词comp(复合词)
显示
,但从不在列表中使用
word(复合词)
。这应该是一个非常有力的指标,告诉你你的代码是错误的。非常优雅!非常感谢你。