Python 遍历列表并替换某个索引中的实例?

Python 遍历列表并替换某个索引中的实例?,python,Python,为了回答这个问题,我有一个名为list的列表,其中包含元组 List = [ ("foo", "bar", 1, 0), ("foo", "bar", 3, 1), ("foo", "bar", 1, 2) ] 在每个子列表的索引位置2(列表中的第三项),我需要替换为另一个列表中的相应项 References = ["zero", "one", "two", "three"] 预期输出将是新的列表: List = [ ("foo", "bar", "one",

为了回答这个问题,我有一个名为
list
的列表,其中包含元组

List = [
    ("foo", "bar", 1, 0),
    ("foo", "bar", 3, 1),
    ("foo", "bar", 1, 2)
]
在每个子列表的索引位置
2
(列表中的第三项),我需要替换为另一个列表中的相应项

References = ["zero", "one", "two", "three"]
预期输出将是新的
列表

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]
Q:我该怎么做?提前谢谢


编辑:我的代码出错了-列表中的
是元组,而不是列表。

你的意思是这样吗

for el in List: el[2] = References[el[2]]

你想这么做吗

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)

注意:引用列表位置被视为相等的字符串。

请使用下面的代码段

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)

元组是不可变的,这意味着您不能更新或更改元组元素的值。您可以执行以下任一过程:

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)

首先,避免将变量名大写(遵守命名约定)

其次,您可以使用列表理解:

>>> 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]]
不会修改原始列表,但会生成新列表。(仅当您具有列表而非元组时才有效。)

第三,我猜,
1
2
。。。这只是一个例子。例如,如果您确实想要纯文本形式的数字,而不是硬编码
引用
列表,您可以使用一些库来进行数字到单词的转换

第四,您执行的操作相当于SQL
JOIN
。如果参考未知,当前代码将失败(引发一个
键错误
):

  • 对于
    内部联接
    ,只需检查引用中的
    行[2],如果不是这样,则跳过该行
    
  • 对于
    左联接
    ,将
    引用[row[2]]
    替换为
    references.get(row[2])
    中的
    引用[row[2],)

首先,避免将变量名大写(对于命名约定,请坚持使用)

其次,您可以使用列表理解:

>>> 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]]
不会修改原始列表,但会生成新列表。(仅当您具有列表而非元组时才有效。)

第三,我猜,
1
2
。。。这只是一个例子。例如,如果您确实想要纯文本形式的数字,而不是硬编码
引用
列表,您可以使用一些库来进行数字到单词的转换

第四,您执行的操作相当于SQL
JOIN
。如果参考未知,当前代码将失败(引发一个
键错误
):

  • 对于
    内部联接
    ,只需检查引用中的
    行[2],如果不是这样,则跳过该行
    
  • 对于
    左联接
    ,将
    引用[row[2]]
    替换为
    references.get(row[2])
    中的
    引用[row[2],)

一个
三个
等,应该是变量名(正如您对
列表
的定义)或字符串文字
“一个”
等(正如您对
引用的定义
)?是
一个
三个
等,应该是变量名(如您对
列表的定义中所示)或字符串文字
“一”
等(如您对
引用的定义中所示)?它给出了
TypeError:“tuple”对象不支持项分配
哦,当我看到你的代码时,我认为只有列表。那么,你真的想处理tuple吗?因为如果不想,你可以用
[]替换
列表
中的
()
它给出了
类型错误:“tuple”对象不支持项目分配
哦,当我看你的代码时,我认为只有列表。那么,你真的想处理tuple吗?因为如果不想,你可以用
[]替换
列表中的
()
Gives
TypeError:“tuple”对象不支持项目分配
@nx\u prv我用两个不同的过程更新了我的答案。你可以按照任何一个过程进行操作。Gives
TypeError:“tuple”对象不支持项目分配
@nx\u prv我用两个不同的过程更新了我的答案。你可以按照任何一个过程进行操作。