2016-11-09 42 views
0

我在創建新元組時遇到了麻煩。我在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), .....] 

有沒有辦法讓這種情況發生?

+2

'是有辦法做到這一點?'的當然有。你試過什麼了?因爲這個問題是超寬泛的。 – MooingRawr

+1

'count'不是Python中定義的名稱,並且您的list-comp語法不正確,您不能在list-comp('n =')內部進行變量賦值。所以請修改您的問題以包含您的「count」功能,並更正您的語法錯誤。 –

回答

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

+0

完美!我以前從未使用過它,但看起來很方便。謝謝@丹! –

0

這是一個有點混亂,你寫什麼。

也許你想這樣的:

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

做些什麼:

  1. 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 
    
  • 它是一個list comprehension

    1. 最後將zip(x, y, z)應用於三個列表。 在你的情況下,A,B和A + B在步驟2中得到
    0

    我也不是很明白你的問題,但假設我們知道「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)] 
    
    +0

    謝謝@nikaidoh!它正在工作。 n是我使用計數器(元組)後發生元組的結果。這個列表是我按照降序對字典進行排序後的結果。 –