如果在python中满足两个条件,则返回列表索引

时间:2013-05-16 11:54:27

标签: python

如果满足两个条件,我试图在列表中找到索引,并将这些索引存储在新列表中。目前我可以在列表中找到符合条件的条目,但无法弄清楚如何获取列表索引。

列表是:

[[0, 1], [1, 0], [0, 2], [1, 1], [2, 0], [0, 3], [1, 2], [2, 1], [3, 0]]

到目前为止我的代码:

m2=[]
for i in range(0,len(gmcounter)):
  if countersum[i]==2 and 2 in gmcounter[i]:
    m2.append(gmcounter[i])
print m2

Countersum是一个包含列表元素总和的列表,因此返回[[0, 2], [2, 0]] 我希望m2能够获取满足两个条件的索引值,所以我希望m1取[4,5]

我有一个想法,它将与枚举函数有关,但到目前为止,我尝试包含这些功能

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

您的i已经是满足这两个条件的索引。

使用enumerate(),可能与zip()合并将是更加pythonic的方法:

m2=[]
for i, (csum, counter) in enumerate(zip(countersum, gmcounter)):
    if csum == 2 and 2 in counter:
        m2.append(i)

或者,使用列表理解:

m2 = [i for i, (csum, counter) in enumerate(zip(countersum, gmcounter)) if csum == 2 and 2 in counter]

答案 1 :(得分:1)

你可以完全不使用索引,就像@Martijn那样。或者您可以采用基于索引的方法,只需构建所需的索引列表:

[ i for i in range(len(gmcounter)) if countersum[i]==2 and 2 in gmcounter[i] ]

这不那么“pythonic”,可能触摸速度较慢,所以请尽量避免使用无索引的方式。