簡體   English   中英

遍歷列表並替換某個索引中的實例?

[英]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]]

原始列表不會被修改,但是會生成一個新列表。 (僅當您有列表,而不是元組時,它才起作用。)

第三,我猜onetwo ,...只是一個例子。 如果您確實想要純文本中的數字,而不是對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM