【问题标题】:New tuple from a mess tuple来自混乱元组的新元组
【发布时间】:2016-11-09 14:48:52
【问题描述】:

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

有没有办法做到这一点?

【问题讨论】:

  • is there a way to make this happen? 当然有。你试过什么了?因为这个问题太宽泛了。
  • count 不是 Python 中定义的名称,并且您的 list-comp 语法不正确,您不能在 list-comp (n=) 内进行变量赋值。因此,请修改您的问题以包含您的 count 函数,并更正您的语法错误。

标签: python python-2.7 list tuples list-comprehension


【解决方案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。

【讨论】:

  • 完美!我以前从未使用过它,但看起来非常方便。谢谢@Dan!
【解决方案2】:

你写的有点混乱。

也许你想要这个:

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

它的作用:

  1. zip()returs a list of tuples

请注意,元组和列表是两种不同的数据结构。 在您的问题中,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 和在步骤 2 中获得的 a+b。

【讨论】:

    【解决方案3】:

    我不太了解你的问题,但假设我们知道每个元组的“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)]
    

    【讨论】:

    • 谢谢@nikaidoh!它正在工作。 n 是我使用 Counter(tuple) 后元组出现的结果。该列表是我将字典按降序排序后的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    相关资源
    最近更新 更多