2016-07-20 91 views
1

在如下所示的代碼中編輯元組的一種推薦的/最蟒蛇的方式是什麼?向一個元組中的所有值添加一個整數

tup_list = [(1, 2), (5, 0), (3, 3), (5, 4)] 
max_tup = max(tup_list) 
my_tup1 = (max_tup[0] + 1, max_tup[1] + 1) 
my_tup2 = tuple(map(lambda x: x + 1, max_tup)) 
my_tup3 = max([(x+1, y+1) for (x, y) in tup_list]) 

以上三種方法哪一種是首選,還是有更好的方法來做到這一點? (在這個例子中當然應該返回(6, 5))。

有一種誘惑,像做

my_tup = max(tup_list)[:] + 1 

my_tup = max(tup_list) + (1, 1) 

但是沒有這些工作的效果明顯。

+1

第一個看起來是最可讀的。您還應該使用'timeit'模塊來測試速度,我認爲這會讓結果更接近。 – Rockybilly

+1

@Rockybilly我同意。在這種情況下,速度不是問題。 – Siwel

回答

5

只需使用一臺發電機表達tuple

my_tup = tuple(x+1 for x in max_tup) 
# or my_tup = tuple(x+1 for x in max(tup_list)) 
+0

這就是我一直在尋找的東西,感覺就像我一定錯過了一些東西! – Siwel

1
my_tup1 = (max_tup[0] + 1, max_tup[1] + 1) 

直截了當,易於閱讀。圓括號明確指出將創建一個元組,並且+表示將修改數字。因此它也似乎pythonic。

my_tup2 = tuple(map(lambda x: x + 1, max_tup)) 

注意到的功能性的方法,但元組被濫用爲列表,並且最後它被轉換回爲元組。不是直截了當的人不知道python的元組是如何工作的。

my_tup3 = max([(x+1, y+1) for (x, y) in tup_list]) 

用途不變,如此你需要用它周圍你的頭最大的仍然是相同的,如果所有的值加1,這個代碼比其他任何方式更多的工作。

所以我會去第一種方法。

相關問題