在地图中放置for循环?

时间:2014-05-09 21:01:59

标签: python

我有以下x并且我想获取项目== 0的索引,例如下面的索引2:

[['UNITED STATES', 'OHIO, USA'],
 ['NEW YORK, USA', 'UNITED STATES'],
 ['LYON, FRANCE', 'FRANCE', '0']
 ['FRANCE']]

我知道如何用forloop解决这个问题,但我想知道我是否可以使用map来做同样的事情。

这不起作用:

map(lambda y: i==0 for i in y, x)

For loop solution:

zero = []
for i, val in enumerate(x):
    for y, yval in enumerate(val):
        if yval == '0':
            zero.append(i)

3 个答案:

答案 0 :(得分:1)

map()可能不是正确的方法,因为您最终会得到一个与原始列表长度相同的列表。因此,在这种情况下,使用map()可以做的最好的事情就是让它返回[False, False, True, False]

filter()可能更合适,但如果你只是在寻找单行解决方案,列表理解可能就是这样:

x = [['UNITED STATES', 'OHIO, USA'],
     ['NEW YORK, USA', 'UNITED STATES'],
     ['LYON, FRANCE', 'FRANCE', '0'],
     ['FRANCE']]
zero = [i for i, row in enumerate(x) if '0' in row]

以下是filter()的外观:

zero = filter(lambda i: '0' in x[i], range(len(x)))

请注意,在Python 3.x上filter()会返回一个生成器而不是列表,因此如果您希望结果为列表,则需要zero = list(filter(...))

答案 1 :(得分:0)

你可以使用python filter方法更清洁:

my_list.index(filter(lambda x: '0' in x, my_list)[0])

filter(lambda x: '0' in x, my_list)[0]返回包含0的第一项 my_list.index(<item>)返回该项的索引

答案 2 :(得分:0)

而不是map,您应该使用filter

filter(lambda i: '0' in data[i], range(len(data))

但是,过滤器不被视为pythonic。更清晰的是列表理解

[i for i in range(len(data)) if '0' in data[i]]

您还可以使用枚举删除索引变量。

[i for i, row in enumerate(data) if '0' in row]