我在创建新元组时遇到了麻烦。我是python中的新手。
假设我有一个元组列表:
a = [1,2,6,4,5]
b = [3,7,3,4,6]
[((11, 5, 6), n), ((9, 6, 3), n), ((9, 2, 7), n), ((8, 4, 4), n), ((4, 1, 3), n)]
属于[(a+b,a,b),n=count(zip(a,b)),...........]
我的最终目标是制作一个这样的元组: (删除一个+ b,并将'n'值放入元组中)
[(5,6,n), (6,3,n), .... ]
[(a,b,n), .....]
有没有办法让这种情况发生?
答案 0 :(得分:1)
只需使用元组解包:
[(a, b, n) for ((_, a, b), n) in T]
其中T
是输入,结果是请求的形式。
示例:
>>> T = [((11, 5, 6), 1), ((9, 6, 3), 2), ((9, 2, 7), 3), ((8, 4, 4), 4), ((4, 1, 3), 5)]
>>> [(a, b, n) for ((_, a, b), n) in T]
[(5, 6, 1), (6, 3, 2), (2, 7, 3), (4, 4, 4), (1, 3, 5)]
我已将n
替换为数字1到5。
答案 1 :(得分:0)
你写的东西有点令人困惑。
也许你想要这个:
zip(a,b,[sum(x) for x in zip(a,b)])
它的作用:
zip()
returs a list of tuples 请注意,元组和列表是两种不同的数据结构。
在您的问题中,a = []
和b = []是整数列表,而不是tuples。
[ f(x) for x in g(y,z)]
的语法等同于伪代码:
for each_item in iterable_like_a_list_is:
apply f() to each_item
return a list of f(x) items
zip(x, y, z)
应用于三个列表。
在您的情况下,a,b和步骤2中获得的a + b。答案 2 :(得分:0)
我不太了解你的问题,但假设我们知道' n'每个元组的值(我将我的n' s固定为1)
天真的解决方案是(没有元组解包)
n = 1
x = [((11, 5, 6), n), ((9, 6, 3), n), ((9, 2, 7), n), ((8, 4, 4), n), ((4, 1, 3), n)]
y= [(tuple_[0][1],tuple_[0][2], tuple_[1]) for tuple_ in x]
print(y)
打印
[(5, 6, 1), (6, 3, 1), (2, 7, 1), (4, 4, 1), (1, 3, 1)]