从混乱的元组中创建新元组

2024-04-26 09:18:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在创建一个新的元组时遇到了麻烦。我对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)),...........]

我的最终目标是生成这样一个元组: (删除a+b,并将“n”值放入元组)

[(5,6,n), (6,3,n), .... ] 
[(a,b,n),  .....]

有什么办法可以实现吗?你知道吗


Tags: 列表countzip元组办法陌生
3条回答

只需使用元组解包:

[(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)]

我用数字1到5替换了n。你知道吗

我不太明白你的问题,但假设我们知道每个元组的n值(我把n固定为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)]

你写的东西有点混乱。你知道吗

也许你想要这个:

zip(a,b,[sum(x) for x in zip(a,b)])

它的功能:

  1. zip()returs a list of tuples

请注意,tuples和list是两种不同的数据结构。 在您的问题中,a = []和b=[]是整数列表,而不是tuples。你知道吗

  1. [ 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
    

它是一个list comprehension。你知道吗

  1. 最后对三个列表应用zip(x, y, z)。 在你的例子中,a,b和a+b是在第2步得到的。你知道吗

相关问题 更多 >