確定的名單,所以我必須列出列表修真名單
list = [['a','b','c'], ['1','2','3'], ['x','y','z']]
的名單,我想編輯每個列表的第一個項目,因此之前它有一個象徵。一個 」?」在這個例子中。我想我可以使用列表理解來做到這一點。類似的東西:
list = ['?'+x for x in i[0] for i in list]
但這只是給了我一個錯誤。這個列表理解的東西讓我困惑,我該怎麼做?
確定的名單,所以我必須列出列表修真名單
list = [['a','b','c'], ['1','2','3'], ['x','y','z']]
的名單,我想編輯每個列表的第一個項目,因此之前它有一個象徵。一個 」?」在這個例子中。我想我可以使用列表理解來做到這一點。類似的東西:
list = ['?'+x for x in i[0] for i in list]
但這只是給了我一個錯誤。這個列表理解的東西讓我困惑,我該怎麼做?
做
l = [['?' + i[0]] + i[1:] for i in l] (l is the list you pass in)
讓我再次重申:不要命名一個變量'list';您通過這樣做掩蓋了內置類型。 –
@MartijnPieters,好吧,我聽到你。我只是不知道有一個內置的列表。它有什麼作用? – Nathan
@Nathan它返回一個列表對象。 – SethMMorton
首先,不要命名變量list
;您現在正在屏蔽built-in list()
type,並且如果您希望list()
在代碼中的其他位置仍然是該類型,則很容易導致出現錯誤。
要前置字符串到每個嵌套列表的第一個元素,使用一個簡單的列表理解:
outerlist = [['?' + sub[0]] + sub[1:] for sub in outerlist]
這從嵌套列表,通過連接一個元素列表與所述第一建立一個新的列表元素更改,加上子列表的其餘部分。
演示:
>>> outerlist = [['a','b','c'], ['1','2','3'], ['x','y','z']]
>>> [['?' + sub[0]] + sub[1:] for sub in outerlist]
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]
等待,這不起作用...這只是給我'外表'沒有定義。如果我用列表替換外部列表沒有任何變化 – Nathan
@Nathan:我使用了一個不同的名稱,不掩蓋內置。示例代碼不會重新分配結果;使用'outerlist = [...]'來分配它。 –
>>> [['?' + el if i==0 else el for i,el in enumerate(subl)] for subl in L]
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]
此外,如果您希望修改初始列表,你可以修改它就地而無需創建一個新問題:
>>> for sublist in L:
sublist[0] = '?' + sublist[0]
>>> L
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]
這應該工作:
>>> l = [['a','b','c'], ['1','2','3'], ['x','y','z']]
>>> [["?"+a,b,c] for [a,b,c] in l]
[['?a', 'b', 'c'], ['?1', '2', '3'], ['?x', 'y', 'z']]
>>>
不要將列表命名爲list,它會掩蓋內置類型。 –