出于这个问题的目的,我有一个名为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
中是元组,而不是列表。
答案 0 :(得分:3)
您是要这样做吗?
for el in List: el[2] = References[el[2]]
答案 1 :(得分:1)
请使用下面的代码段,
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)
注意:参考列表的位置被认为是等效字符串。
答案 2 :(得分:1)
组是不可变的,这意味着您无法更新或更改元组元素的值。您可以按照以下任一过程进行操作:
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)
答案 3 :(得分:1)
首先,避免对变量名进行大写(对于命名约定,请遵循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
的功能。如果引用不正确,当前代码将失败(引发KeyError
):
INNER JOIN
,只需检查row[2] in references
是否存在,如果不是,请跳过该行。 LEFT JOIN
,用references[row[2]]
的{{1}}替换references.get(row[2])
。