Python-在包含一个元素的列表中搜索列表索引

Python-在包含一个元素的列表中搜索列表索引,python,list,Python,List,我有一个4个长度的列表 L = [[1,2,12,13],[2,3,13,14],...] 两个整数a和b在子列表中多次出现。我想要的是找到L中包含a和b的子列表的索引 我写了一些代码 l=[] for i in range(len(L)): if L[i][0]==a or L[i][1]==a or L[i][2]==a or L[i][3]==a: l.append([i] + L[i]) # I put the index in the first positi

我有一个4个长度的列表

L = [[1,2,12,13],[2,3,13,14],...]
两个整数a和b在子列表中多次出现。我想要的是找到L中包含a和b的子列表的索引

我写了一些代码

l=[]
for i in range(len(L)):
    if L[i][0]==a or L[i][1]==a or L[i][2]==a or L[i][3]==a:
        l.append([i] + L[i]) # I put the index in the first position.
# Now l is a list of 5-length lists.
# I do the same loop on that list.
r=[]
for i in range(len(l)):
    if l[i][1]==b or l[i][2]==b or l[i][3]==b or l[i][4]==b:
        r.append(i)
我要找的索引在列表r中。不过,我很确定有另一种方法可以用Python实现,因为我几乎不懂这种语言。也许如果我的变量L不是一个列表列表,它会更容易/更快,因为我会在主程序中多次调用这个过程。(len(L)约为3000)

顺便说一下,我知道索引的数量在1到4之间,所以我可以放一些休息,但我不知道它是否会更快

----------------编辑1----------------

将第二句中的“a或b(或包括在内)”改为“a和b”。关于我的目标,我写了一个错误。

用于测试子列表:

if any(a in subl for subl in L):
这将测试每个
subl
,但如果找到匹配项,则会提前退出生成器表达式循环

但是,这不会返回匹配的特定子列表。可以与生成器表达式一起使用以查找第一个匹配项:

matched = next((subl for subl in L if a in subl), None)
if matched is not None:
    matched[1] += 1
其中,如果生成器表达式引发
StopIteration
异常,则返回默认值
None
,或者您可以忽略默认值,改用异常处理:

try:
    matched = next(subl for subl in L if a in subl)
    matched[1] += 1
except StopIteration:
    pass # no match found
您可以这样做:

r = [i for i,x in enumerate(L) if any(y in x for y in (a,b))]

enumerate将在列表理解中为您提供索引和值,any语句将告诉您a或b是否在x中,x是L中的一个子列表。这种事情就是列表理解的目的

如果你真的想要包含,或者-,那么这就是你想要的列表。在你的代码中,目前,你已经给出和

result = [a_tuple for a_tuple in L if a in a_tuple or b in a_tuple]
试一试

for index, item in enumerate(L):
  if a in item or b in item:
    r.append(index)

你能再描述一下你的问题吗。你想做什么?你目前的方法有什么问题?真的太慢了吗??(L有多长?)另外,在您当前的代码中,r是一个列表列表,包含a和b——不包含或。我需要主列表L中每个子列表的索引,其中包含a或b或a和b。我的代码给了我正确的答案,但由于我几乎不懂Python语言,我确信有一种更快的方法可以做到这一点。主列表L大约有3000长,每个子列表有5长。matched=next((如果在subl中有a,则在L中的subl为subl),None)只给出一个包含a的子列表;如何让Python继续搜索?我需要索引,因为写最后一行L.index(匹配)是愚蠢的