Python 在地图中放置for循环?
我有下面的x,我想获取一个item==0的索引,比如下面的索引2:Python 在地图中放置for循环?,python,Python,我有下面的x,我想获取一个item==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) 对于循环解决方案: zero
[['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)
对于循环解决方案:
zero = []
for i, val in enumerate(x):
for y, yval in enumerate(val):
if yval == '0':
zero.append(i)
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()
时的外观:
请注意,在Python 3.x上filter()
返回一个生成器而不是一个列表,因此,如果您希望结果是一个列表,您可能希望zero=list(filter(…)
,您可以更干净地使用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()
返回该项的索引您应该使用过滤器,而不是映射
filter(lambda i: '0' in data[i], range(len(data))
但是,过滤器不被认为是pythonic。更清楚的是一份清单
[i for i in range(len(data)) if '0' in data[i]]
还可以使用enumerate删除索引变量
[i for i, row in enumerate(data) if '0' in row]
请指定您使用的是Python 2还是Python 3。答案可能不同,“不是pythonic”,然后是一行,通过索引进行迭代filter()
的可读性通常不如列表comp,但在Python中,按索引进行迭代从来都不是正确的解决方案,更不符合Python的风格。
[i for i, row in enumerate(data) if '0' in row]