遍历元组并将索引值与列表中的项目进行比较

时间:2019-01-30 18:50:53

标签: python

我有一个元组和列表。我需要用元组中的值替换列表中的项目,但是在从列表中获取项目并将其与元组中的索引进行比较的方式上,如果有匹配项,我需要从元组中获取值并替换列表中的项目那个价值。

如果这有点令人困惑,这是一个伪代码:

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)

3 个答案:

答案 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]

请注意,我并没有使用您的原始名称tuplelist,因为这些是内置类型的名称,所以屏蔽它们是个坏主意(如果您愿意,可能会导致错误打电话给他们在其他代码)。

答案 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]