Python 映射到最大值的列表数目可变
我有一个可变数量的列表,我想从所有列表中找出这些数字的最大值 我试图使用map函数映射所有列表的最大值,并且需要使用生成器表达式在map函数中传递参数 我正在使用类似的东西,但它不起作用:Python 映射到最大值的列表数目可变,python,Python,我有一个可变数量的列表,我想从所有列表中找出这些数字的最大值 我试图使用map函数映射所有列表的最大值,并且需要使用生成器表达式在map函数中传递参数 我正在使用类似的东西,但它不起作用: map(max,x[c] for c in x.keys()) 例如,我的列表在字典中: {1: [0, 1, 0, 0, 3, 0], 2: [1, 0, 0, 0, 0, 4, 5], 3: [0, 5, 6, 0, 1, 1]} 您可能注意到列表的大小并不都相同,这正是我所希望的,因为我有需要解
map(max,x[c] for c in x.keys())
例如,我的列表在字典中:
{1: [0, 1, 0, 0, 3, 0],
2: [1, 0, 0, 0, 0, 4, 5],
3: [0, 5, 6, 0, 1, 1]}
您可能注意到列表的大小并不都相同,这正是我所希望的,因为我有需要解析的数据
这样做的结果应该是:[1,5,6,0,3,4,5]
如果还有其他方法,请提出建议
以上是列表的一个示例。我无法使用x.values()检索列表,因为我的实际字典是以这种方式设置的。列表嵌入在层次结构的底部,我需要遍历层次结构的顶部来检索要比较的列表。我必须使用生成器表达式来检索所有列表,因此请提供不使用x.values()的解决方案。要使
max
s超过最短值的末尾,您需要izip\u longest
:
from itertools import izip_longest
d={1: [0, 1, 0, 0, 3, 0],
2: [1, 0, 0, 0, 0, 4, 5],
3: [0, 5, 6, 0, 1, 1]}
# there are other variations like
# [max(column) for column in izip_longest(*d.itervalues())]
print map(max, izip_longest(*d.values()))
# [1, 5, 6, 0, 3, 4, 5]
它在Python3上被称为zip\u longest
即使您没有访问所有列表的简单方法,这仍然是一种方法。您可以根据需要获取列表:
d = {1: {'a': [0, 1, 0, 0, 3, 0]},
2: {'a': [1, 0, 0, 0, 0, 4, 5]},
3: {'a': [0, 5, 6, 0, 1, 1]}}
def value_gen(obj):
for key in obj:
yield obj[key]['a']
然后使用:
map(max, izip_longest(*value_gen(d)))
要使
max
s超过最短值的末尾,需要izip_longest
:
from itertools import izip_longest
d={1: [0, 1, 0, 0, 3, 0],
2: [1, 0, 0, 0, 0, 4, 5],
3: [0, 5, 6, 0, 1, 1]}
# there are other variations like
# [max(column) for column in izip_longest(*d.itervalues())]
print map(max, izip_longest(*d.values()))
# [1, 5, 6, 0, 3, 4, 5]
它在Python3上被称为zip\u longest
即使您没有访问所有列表的简单方法,这仍然是一种方法。您可以根据需要获取列表:
d = {1: {'a': [0, 1, 0, 0, 3, 0]},
2: {'a': [1, 0, 0, 0, 0, 4, 5]},
3: {'a': [0, 5, 6, 0, 1, 1]}}
def value_gen(obj):
for key in obj:
yield obj[key]['a']
然后使用:
map(max, izip_longest(*value_gen(d)))
很抱歉搞混了。设置列表的方式我不能只使用x.values()来检索所有列表,因为列表嵌入在层次结构的底部,我需要在层次结构的顶部进行迭代,我必须使用键作为检索列表的方式…x.values()不适用于methis。它适用于我:map(max,izip_longest(*(x[c]表示x.keys()中的c)))很抱歉搞混了。设置列表的方式我不能只使用x.values()来检索所有列表,因为列表嵌入在层次结构的底部,我需要在层次结构的顶部进行迭代,我必须使用键作为检索列表的方式…x.values()不适用于methis。它适用于我:map(max,izip_longest(*(x[c]表示x.keys()中的c)))我知道你已经得到了一个对你有用的答案。仅供参考
map(max,x[c]表示x.keys()中的c)
不起作用,因为生成器表达式必须放在括号中。如果我做了map(max,(x[c]表示x中的c))
就行了。我知道你已经得到了一个对你有用的答案。仅供参考map(max,x[c]表示x.keys()中的c)
不起作用,因为生成器表达式必须放在括号中。如果我做map(max,(x[c]表示x中的c))
。