搜索列表是python中其他列表的一部分

时间:2014-11-16 14:15:58

标签: python list indexing

这是我的清单:

list =  [[4, '+', 6, '=', 10], [['?', 4], ['+', 0], ['?', 2], ['=', 0], ['?', 'a']]]

我需要找到第二个列表的索引,其中第一个元素是'?'无论第二个元素是什么,

在此示例中,我想要的答案是1,因为子列表['?',4]是正确的。

我试过了:

[x for x, y in enumerate[list] if y[0] == '?']
[y[0] for y in list].index('?')
list[1,[0]].index('?')

我知道我可以写一个例行程序,但你认为有一个语句解决方案。

2 个答案:

答案 0 :(得分:1)

这个问题有点不清楚。我认为你的意思(根据你发布的代码)是第二个列表中的第一个值是?的子列表中的索引。如果是这种情况,您可以使用:

(i for i,x in enumerate(lst[1]) if x[0] == '?').next()

然而,如果第二个列表是

,那不是
[['?', 4], ['+', 0], ['?', 2], ['=', 0], ['?', 'a']]

然后['?', 4]的索引为0,因为pythons索引通常是从0开始的。如果您希望它为1,只需添加一个。

答案 1 :(得分:-1)

解决方案:

>>> lst = [[4, '+', 6, '=', 10], [['?', 4], ['+', 0], ['?', 2], ['=', 0], ['?', 'a']]]
>>> [x for x, y in enumerate(lst) if y[0] == '?']
[0, 2, 4] #the indexes of the locations of the '?')

由于lst有3个嵌套列表,y [0]返回4['?', 4]。您不能执行y [0] [0],因为第一个返回是一个整数(没有切片选项),但您可以循环遍历第二个嵌套列表([['?', 4], ['+', 0], ['?', 2], ['=', 0], ['?', 'a']])。当然,只有在你不需要遍历第一个时才有效!