检查列表中的字符串是否存在于另一个嵌套列表中并且 return 它是嵌套列表中的索引
Check if a string inside a list is present in another nested list and return it's index in nested list
所以我有两个列表,一个普通列表和一个嵌套列表,
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
我想检查 list1 中的任何字符串是否出现在 list2 中,如果是,return list2 中的字符串(在两个列表中)的索引。
演示所需输出的示例代码如下所示:
out = [(ind,ind2) for ind,i in enumerate(list2)
for ind2,y in enumerate(i) if 'john' in y]
print out
它 returns : [(0, 0), (1, 1), (2, 1)]
上面的代码确实输出了索引,但仅限于我们手动输入的字符串。是否可以像我上面解释的那样做?任何帮助将不胜感激。(嵌套列表相当新)。
谢谢!
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
res = []
for i, m in enumerate(list2): #Iterate list2
for j, n in enumerate(m): #Iterate nested list
if n in list1: #Check if element in list1
res.append((i, j)) #Append index.
print res
输出:
[(0, 0), (1, 1), (2, 1)]
您可以简单地遍历 list1:
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
res = {}
for w in list1: # if list1 contains duplicates use set(list1) instead
# create an empty list for the name of list1 and extend it by all finds or
# extend it by None
res.setdefault(w,[]).extend( [(ind,ind2) for
ind,i in enumerate(list2) for ind2,y in enumerate(i) if w in y] or [None] )
# print all results by name
for k in res:
print k, res[k]
# print all dict
print res
输出:
amal [None]
joel [None]
john [(0, 0), (1, 1), (2, 1)]
george [None]
{'amal': [None], 'joel': [None], 'john': [(0, 0), (1, 1), (2, 1)], 'george': [None]}
我在这里使用的是字典,所以你不要忘记列表中的哪个位置。
您可以使用嵌套 list-comprehension:
[(i, j) for i, l in enumerate(list2) for j, s in enumerate(l) if s in list1]
#[(0, 0), (1, 1), (2, 1)]
并注意先将 list1
转换为 set
效率更高:
set1 = set(list1)
[(i, j) for i, l in enumerate(list2) for j, s in enumerate(l) if s in set1]
#[(0, 0), (1, 1), (2, 1)]
您还可以创建出现的字典:
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
new_d = {i:[(c, d) for d, a in enumerate(list2) for c, g in enumerate(a) if g == i] for i in list1}
输出:
{'amal': [], 'joel': [], 'john': [(0, 0), (1, 1), (1, 2)], 'george': []}
所以我有两个列表,一个普通列表和一个嵌套列表,
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
我想检查 list1 中的任何字符串是否出现在 list2 中,如果是,return list2 中的字符串(在两个列表中)的索引。 演示所需输出的示例代码如下所示:
out = [(ind,ind2) for ind,i in enumerate(list2)
for ind2,y in enumerate(i) if 'john' in y]
print out
它 returns : [(0, 0), (1, 1), (2, 1)]
上面的代码确实输出了索引,但仅限于我们手动输入的字符串。是否可以像我上面解释的那样做?任何帮助将不胜感激。(嵌套列表相当新)。 谢谢!
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
res = []
for i, m in enumerate(list2): #Iterate list2
for j, n in enumerate(m): #Iterate nested list
if n in list1: #Check if element in list1
res.append((i, j)) #Append index.
print res
输出:
[(0, 0), (1, 1), (2, 1)]
您可以简单地遍历 list1:
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
res = {}
for w in list1: # if list1 contains duplicates use set(list1) instead
# create an empty list for the name of list1 and extend it by all finds or
# extend it by None
res.setdefault(w,[]).extend( [(ind,ind2) for
ind,i in enumerate(list2) for ind2,y in enumerate(i) if w in y] or [None] )
# print all results by name
for k in res:
print k, res[k]
# print all dict
print res
输出:
amal [None]
joel [None]
john [(0, 0), (1, 1), (2, 1)]
george [None]
{'amal': [None], 'joel': [None], 'john': [(0, 0), (1, 1), (2, 1)], 'george': [None]}
我在这里使用的是字典,所以你不要忘记列表中的哪个位置。
您可以使用嵌套 list-comprehension:
[(i, j) for i, l in enumerate(list2) for j, s in enumerate(l) if s in list1]
#[(0, 0), (1, 1), (2, 1)]
并注意先将 list1
转换为 set
效率更高:
set1 = set(list1)
[(i, j) for i, l in enumerate(list2) for j, s in enumerate(l) if s in set1]
#[(0, 0), (1, 1), (2, 1)]
您还可以创建出现的字典:
list1 = ['john','amal','joel','george']
list2 = [['john'],['jack','john','mary'],['howard','john'],['jude']]
new_d = {i:[(c, d) for d, a in enumerate(list2) for c, g in enumerate(a) if g == i] for i in list1}
输出:
{'amal': [], 'joel': [], 'john': [(0, 0), (1, 1), (1, 2)], 'george': []}