Python 如何找到列表中前两个元素的索引,这两个元素是另一个列表中的任何元素?
如何找到列表中前两个元素的索引,这两个元素是另一个列表中的任何元素 例如:Python 如何找到列表中前两个元素的索引,这两个元素是另一个列表中的任何元素?,python,Python,如何找到列表中前两个元素的索引,这两个元素是另一个列表中的任何元素 例如: story = ['a', 'b', 'c', 'd', 'b', 'c', 'c'] elementsToCheck = ['a', 'c', 'f', 'h'] 在这种情况下,所需的输出是字符串“a”和“c”的列表索引=[0,2] story = ['a', 'b', 'c', 'd', 'b', 'c', 'c'] elementsToCheck = ['a', 'c', 'f', 'h'] out = []
story = ['a', 'b', 'c', 'd', 'b', 'c', 'c']
elementsToCheck = ['a', 'c', 'f', 'h']
在这种情况下,所需的输出是字符串“a”和“c”的列表索引=[0,2]
story = ['a', 'b', 'c', 'd', 'b', 'c', 'c']
elementsToCheck = ['a', 'c', 'f', 'h']
out = []
for i, v in enumerate(story):
if v in elementsToCheck:
out.append(i)
if len(out) == 2:
break
print(out)
印刷品:
[0, 2]
story=['a','b','c','d','b','c','c']
elementsToCheck=['a','c','f','h']
tmp=[]
对于范围(0,len(elementsToCheck))中的i:
如果元素检查故事中的[i]和i,这里有更多的pythonic解决方案。我想您要检查的每个元素都应该是唯一的,所以最好使用集合而不是列表。您可以查找要检查的每个元素的索引,并返回两个最小的索引
story = ['a', 'b', 'c', 'd', 'b', 'c', 'c']
elementsToCheck = {'a', 'c', 'f', 'h', 'd'}
idxs = {story.index(x) for x in elementsToCheck if x in story}
print(
min(idxs), min(idxs-{min(idxs)})
)
可能是实现这一点的最短方法:
[i for i, x in enumerate(story) if x in elementsToCheck][:2]
这里有一个更一般的方法
def firstShared(story,elementsToCheck,n=2):
overlap = set(i for i in elementsToCheck if i in story)
firstn = sorted(overlap,key=elementsToCheck.index)[:n]
indices = [story.index(i) for i in firstn]
return(indices)
if __name__ == '__main__':
n = 2
story = ['a', 'b', 'c', 'd', 'b', 'c', 'c']
elementsToCheck = ['a', 'c', 'f', 'h']
# elementsToCheck = ['a', 'b', 'c', 'd', 'f', 'h']
for i in range(4):
print(firstShared(story,elementsToCheck,i))
# []
# [0]
# [0, 2]
# [0, 2]
那么,为什么不[0,2,5,6]
?这些也是['a',c']
的索引,它们是元素检查的前两个元素。
?@quamrana啊,对不起!我说得不够清楚。我的意思是说,我只想在故事中的前两次出现元素中的任何元素进行检查。这就是为什么只保存了两个索引:0和2以及相应的“a”和“c”。如果story
在开始时有另一个'a'
,结果会是什么?@superfund rain在这种情况下,结果会是索引=[0,1]紧凑而漂亮。然而,如果故事是一个大数组,这将是低效的。是的,如果我们能在列表理解中有一个突破,这样紧凑和高效可以共存,我会很高兴。
def firstShared(story,elementsToCheck,n=2):
overlap = set(i for i in elementsToCheck if i in story)
firstn = sorted(overlap,key=elementsToCheck.index)[:n]
indices = [story.index(i) for i in firstn]
return(indices)
if __name__ == '__main__':
n = 2
story = ['a', 'b', 'c', 'd', 'b', 'c', 'c']
elementsToCheck = ['a', 'c', 'f', 'h']
# elementsToCheck = ['a', 'b', 'c', 'd', 'f', 'h']
for i in range(4):
print(firstShared(story,elementsToCheck,i))
# []
# [0]
# [0, 2]
# [0, 2]