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]