我有以下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)
答案 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]