我经常避免写这样的帖子,但我是 python 3.4 的新手,我需要有关此代码的帮助。
假设我们有以下列表:
v = [ [ x, y ] for x in ['a','b','c'] for y in range(1,5) ]
它产生一个列表列表:[ ['a', '1'], ['a','2'], ... ]
现在我想加入那些字符串。我尝试了以下方法:
p = map(lambda (x, y): ''.join(x,y), v)
没用。
错误:
TypeError: join() takes exactly one argument (2 given)
我已经尝试查阅文档,但还是无法解决我的问题。
有人知道吗?
最佳答案
你可以这样做:
>>> list(map(lambda x: ''.join(map(str, x)), v))
['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4', 'c1', 'c2', 'c3', 'c4']
这将为 v
中的每个元素执行函数 lambda x: ''.join(map(str, x))
。 v
中的元素是一个列表,其中包含一个字符串和一个整数作为值。这意味着 lambda
函数接收到的 x
是包含这两个值的列表。
然后我们需要确保该列表中的所有值都是字符串,然后再将它们传递给 join()
。这意味着我们将调用 map(str, x)
将子列表 x
中的所有值转换为字符串 (['a', 1]
变为 ['a', '1']
)。然后我们可以通过将结果传递给 ''.join(...)
来加入它们(['a', '1']
变为 [ 'a1']
).这是为 v
中的每个列表完成的,所以这给了我们想要的结果。
map
的结果是 Python 3.x 中所谓的 mapobject
因此我们将所有内容包装在 list()
调用中最终得到一个列表。
此外,列表推导式在这里可以说更具可读性:
>>> [x[0] + str(x[1]) for x in v]
['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4', 'c1', 'c2', 'c3', 'c4']
关于python - 如何让 Maps 和 lambdas 在 python 3.4 中使用矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30413099/