2015-12-03 67 views
1

我有一個問題,看起來很簡單,但我還找不到一個可以接受的答案。看起來它已經在這裏被多次提出,但是沒有一個答案對我有幫助。如何添加連續數字到元組列表

這就是:

我有一個元組的名單,具體如下:

reflist = [("Author1", 1900, "Some reference"), ("Author2", 1901, "Another reference"), ("Author3", 1902, "Yet another reference")] 

我要的是一個連續的號碼添加到每個元組列表,讓我得到:

reflist = [(1, "Author1", 1900, "Some reference"), (2, "Author2", 1901, "Another reference"), (3, "Author3", 1902, "Yet another reference")] 

這看起來愚蠢和列表理解應該做的伎倆,但我無法辨別到底有:-(

預先感謝您提供的任何幫助。

回答

2

enumerate()在一個序列上運行並生成索引值對。你不能直接合併到你的元組中 - 因爲元組是不可變的,你不能改變它們的長度 - 但你可以做的一種方法是將你已經存在的元組轉換成列表,將索引號轉換爲列表,將兩個連接起來列出了一起,並將結果轉換爲一個元組:

reflist2 = [tuple([index+1] + list(ref)) for index, ref in enumerate(reflist)] 

(我是編輯索引+ 1,因爲枚舉從0開始計數)

+0

謝謝,它工作得很好! – maurobio

0
f = [tuple(list(elem).insert(0, i)) for elem in reflist for in range(len(reflist))] 

什麼這個列表理解確實是它告訴reflist中的每個原始條目,它應該將其轉換爲列表,然後將某個整數列表中的數字插入列表的0位置,然後將該列表轉換回元組,並將它們放在ne wlist中。

+0

'for in range'位中的語法無效。修復缺少的'i',它不起作用,因爲'list.insert()'不返回任何東西,所以'tuple()'沒有參數,並且它拋出'TypeError:'NoneType'對象不是iterable'。即使這是固定的,它也是一個雙循環,所以它返回每個列表項的次數與列表中的項數一樣多 - 結果太多了。 – TessellatingHeckler