我有一个元组和列表。我需要用元组中的值替换列表中的项目,但是在从列表中获取项目并将其与元组中的索引进行比较的方式上,如果有匹配项,我需要从元组中获取值并替换列表中的项目那个价值。
如果这有点令人困惑,这是一个伪代码:
tuple = ('a','b','c','d','e','f','g','h','i')
list = ['1','4','8','3','b','g','x','4','z','r','0','0']
result = ['b','e','i','d','b','g','x','e','z','r','a','a']
我是Python的新手,所以我尝试从C#,Java,JS,PHP等实现一些先前的知识,但没有成功。
更新:这是我的问题的解决方案,谢谢大家!
input_tuple = ('a','b','c','d','e','f','g','h','i','j')
input_list = ['1','2','0','1','3','0','7','9','12','899']
lenght=len(input_tuple)-1 # find last index value in tuple
for i, v in enumerate(input_list):
#print (i, v)
result = [v if not v.isdigit() or int(v)>lenght else input_tuple[int(v)] for v in input_list] #slight modification "or int(v)>lenght" to avoid if number in list is bigger then index of tuple
print(result)
答案 0 :(得分:2)
如果我的理解正确,您想用元组中的相应字符串替换列表中的数字字符串,并将数字字符串解释为索引。
做起来并不难:
for i, v in enumerate(input_list):
if v.isdigit():
input_list[i] = input_tuple[int(v)]
请注意,这将修改输入列表。如果您不想这样做,则可以使用列表理解功能创建新列表:
result = [v if not v.isdigit() else input_tuple[int(v)] for v in input_list]
请注意,我并没有使用您的原始名称tuple
和list
,因为这些是内置类型的名称,所以屏蔽它们是个坏主意(如果您愿意,可能会导致错误打电话给他们在其他代码)。
答案 1 :(得分:0)
使用'123'.isdigit()
检查值是否为数字。
t = ('a','b','c','d','e','f','g','h','i')
l = ['1','4','8','3','b','g','x','4','z','r','0','0']
[list(t)[int(el)] if el.isdigit() else el for el in l]
输出:
['b', 'e', 'i', 'd', 'b', 'g', 'x', 'e', 'z', 'r', 'a', 'a']
答案 2 :(得分:0)
您可以将功能map()
与一些帮助功能一起使用。例如:
t = ('a','b','c','d','e','f','g','h','i')
l = ['1','4','8','3','b','g','x','4','z','r','0','0']
def func(x):
if x.isdigit():
return t[int(x)]
else:
return x
r = list(map(func, l))
# ['b', 'e', 'i', 'd', 'b', 'g', 'x', 'e', 'z', 'r', 'a', 'a']
或listcomp:
r = [func(i) for i in l]