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
。。。这只是一个例子。例如,如果您确实想要纯文本形式的数字,而不是硬编码引用
列表,您可以使用一些库来进行数字到单词的转换
第四,您执行的操作相当于SQLJOIN
。如果参考未知,当前代码将失败(引发一个键错误
):
- 对于
内部联接
,只需检查引用中的行[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
。。。这只是一个例子。例如,如果您确实想要纯文本形式的数字,而不是硬编码引用
列表,您可以使用一些库来进行数字到单词的转换
第四,您执行的操作相当于SQLJOIN
。如果参考未知,当前代码将失败(引发一个键错误
):
- 对于
内部联接
,只需检查引用中的行[2],如果不是这样,则跳过该行李>
- 对于
左联接
,将引用[row[2]]
替换为references.get(row[2])
中的引用[row[2],)
是一个,三个等,应该是变量名(正如您对列表的定义)或字符串文字“一个”
等(正如您对引用的定义)?是一个,三个等,应该是变量名(如您对列表的定义中所示)或字符串文字“一”
等(如您对引用的定义中所示)?它给出了TypeError:“tuple”对象不支持项分配
哦,当我看到你的代码时,我认为只有列表。那么,你真的想处理tuple吗?因为如果不想,你可以用[]替换列表
中的()
它给出了类型错误:“tuple”对象不支持项目分配
哦,当我看你的代码时,我认为只有列表。那么,你真的想处理tuple吗?因为如果不想,你可以用[]替换列表中的()
GivesTypeError:“tuple”对象不支持项目分配
@nx\u prv我用两个不同的过程更新了我的答案。你可以按照任何一个过程进行操作。GivesTypeError:“tuple”对象不支持项目分配
@nx\u prv我用两个不同的过程更新了我的答案。你可以按照任何一个过程进行操作。