说出像这样的元组列表:
y=[('a', 'b', 'c'),
('a', 'c', 'b'),
('b', 'a', 'c'),
('b', 'c', 'a'),
('c', 'a', 'b'),
('c', 'b', 'a')]
我正在尝试使用reduce()功能在y中创建每个元素的字符串。 ''.join(list(x)给出了第一次迭代的'abc'。
z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)
错误:
AttributeError Traceback (most recent call last)
<ipython-input-102-79858e678e78> in <module>()
----> 1 z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)
<ipython-input-102-79858e678e78> in <lambda>(x, u)
----> 1 z=reduce(lambda x, u=dict(): u.setdefault(''.join(list(x)), []).extend(''.join(list(x))), y)
AttributeError: 'tuple' object has no attribute 'setdefault'
答案 0 :(得分:2)
不清楚为何减少参与。你在寻找:
[''.join(t) for t in y]
答案 1 :(得分:1)
reduce()
,因此您的u
参数设置为y
中的第二个值,即元组。默认值被忽略。
你真的不应该在这里使用reduce()
。当你想在迭代器中使用 next 元素进行每次循环迭代来计算一个聚合值时,你需要reduce()
。
您正在映射:
map(''.join, y)
或使用列表理解:
[''.join(x) for x in y]