[英]Iterate through list and replace instance in a certain index?
對於這個問題,我有一個名為List
,其中包含元組。
List = [
("foo", "bar", 1, 0),
("foo", "bar", 3, 1),
("foo", "bar", 1, 2)
]
在每個子列表的索引位置2
(列表中的第三項)中,我需要替換為另一個列表中的相應項。
References = ["zero", "one", "two", "three"]
預期的輸出將是新的List
:
List = [
("foo", "bar", "one", 0),
("foo", "bar", "three", 1),
("foo", "bar", "one", 2)
]
請注意,列表的其他部分上還有整數,但這些整數保持不變。
我當前的代碼替換整數的所有實例這是不是我想要的:
for r in range(0, len(References)):
for i in List:
List[List.index(i)] = [References[t] if x==t else x for x in i]
問:我該怎么做? 提前致謝。
編輯:我的代碼有誤- List
是元組,而不是列表。
您是要這樣做嗎?
for el in List: el[2] = References[el[2]]
請使用以下代碼段,
List = [
["foo", "bar", 1, 0],
["foo", "bar", 3, 1],
["foo", "bar", 1, 2]
]
References = ["zero", "one", "two", "three"]
for each in List:
if list(each):
each[2]=References[each[2]]
print(List)
注意:參考列表位置被視為等效字符串。
元組是不可變的,這意味着您無法更新或更改元組元素的值。 您可以執行以下任一過程:
1)您可以采用部分現有元組來創建新元組,如下所示:
List_One = [
("foo", "bar", 1, 0),
("foo", "bar", 3, 1),
("foo", "bar", 1, 2)
]
List_Two = []
References = ["zero", "one", "two", "three"]
for i in List_One:
tup = (i[0], i[1], References[i[2]], i[3])
List_Two.append(tup)
print(List_Two)
2)您可以將元組轉換為列表,根據需要進行更改,然后將列表更改回元組。
List = [
("foo", "bar", 1, 0),
("foo", "bar", 3, 1),
("foo", "bar", 1, 2)
]
References = ["zero", "one", "two", "three"]
for i in range(len(List)):
List[i] = list(List[i])
for i in List:
i[2] = References[i[2]]
for i in range(len(List)):
List[i] = tuple(List[i])
print(List)
首先,避免對變量名進行大寫(對於命名約定,請遵循PEP8 )。
其次,您可以使用列表理解:
>>> L = [
... ["foo", "bar", 1, 0],
... ["foo", "bar", 3, 1],
... ["foo", "bar", 1, 2]
... ]
>>> references = ["zero", "one", "two", "three"]
>>> [row[:2]+[references[row[2]]]+row[3:] for row in L]
[['foo', 'bar', 'one', 0], ['foo', 'bar', 'three', 1], ['foo', 'bar', 'one', 2]]
原始列表不會被修改,但是會生成一個新列表。 (僅當您有列表,而不是元組時,它才起作用。)
第三,我猜one
, two
,...只是一個例子。 如果您確實想要純文本中的數字,而不是對references
列表進行硬編碼,則可以使用某些庫將數字轉換為單詞,例如num2words 。
第四,您正在執行與SQL JOIN
等效的操作。 如果引用為unknwon,則當前代碼將失敗(引發KeyError
):
INNER JOIN
,只需檢查row[2] in references
是否存在,否則就跳過該行。 LEFT JOIN
,取代references[row[2]]
由references.get(row[2])
的references.get(row[2], <default value>)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.