首页 > 解决方案 > 如何根据值的范围从其他 2 个列表创建嵌套列表?

问题描述

我有以下两个列表:

list1 = ["valueX", "valueY", "valueZ"]
list2 = [2, 0, 4]

我正在尝试获得以下输出:

desirablelist = [["valueX0", "valueX1", "valueX2"], ["valueY0"], ["valueZ0", "valueZ1", "valueZ2", "valueZ3", "valueZ4"]]

我尝试了类似以下的方法,但它没有按预期工作:

arg_list = []
final_arg_list = []
for x,k in zip(list1,list2):
 for z in range(x):
    arg_list.append( k + str(z) )
 final_arg_list.append(arg_list)

相反,我得到以下输出:

[['valueX0', 'valueX1', 'valueZ0', 'valueZ1', 'valueZ2', 'valueZ3'], ['valueX0', 'valueX1', 'valueZ0', 'valueZ1', 'valueZ2', 'valueZ3'], ['valueX0', 'valueX1', 'valueZ0', 'valueZ1', 'valueZ2', 'valueZ3']]

我究竟做错了什么?

标签: pythonfor-loop

解决方案


我不确定您如何获得问题中提供的输出,因为您当前的代码返回一个错误(您可以通过在此处运行它来查看:https ://repl.it/repls/HumbleRuralSales )。但是,根据您的desirablelist示例,您需要对代码进行一些更改才能获得所需的结果:

  1. arg_list = []需要在第一个循环中定义,以便它为每个 list1 值重置。如果你在循环之外定义它,所有的值将只是相互附加,并且列表永远不会重置:

    [
        ["valueX0", "valueX1", "valueX2", "valueY0", "valueZ0", "valueZ1", "valueZ2", "valueZ3", "valueZ4"],
        ["valueX0", "valueX1", "valueX2", "valueY0", "valueZ0", "valueZ1", "valueZ2", "valueZ3", "valueZ4"],
        ["valueX0", "valueX1", "valueX2", "valueY0", "valueZ0", "valueZ1", "valueZ2", "valueZ3", "valueZ4"]
    ] 
    

    通过在arg_list循环(= []

    [
        ["valueX0", "valueX1", "valueX2"],
        ["valueY0"],
        ["valueZ0", "valueZ1", "valueZ2", "valueZ3", "valueZ4"]
    ]
    
  2. 在第二个循环中,您需要交换xk变量。现在,第二个循环正在尝试遍历 list1 值的范围。list1 的“valueX”、“valueY”、“valueZ”是字符串而不是数字,因此它们没有范围,因此您的代码会返回以下错误:

    TypeError:“str”对象不能解释为整数

    相反,您希望循环遍历 list2 的整数值范围。

  3. 在您的 desirablelist 示例中,每个 list1 集合包含的值比 list2 中的值多一个。因此,您需要将第二个循环的范围从 更改kk + 1

最终代码:

list1 = ["valueX", "valueY", "valueZ"]
list2 = [2, 0, 4]

final_arg_list = []
for x,k in zip(list1,list2):
    arg_list = []
    for z in range(k + 1):
        arg_list.append(x + str(z))
    final_arg_list.append(arg_list)

print(final_arg_list)

工作小提琴:repl.it/repls/CautiousJubilantOperatingenvironment#main.py 


推荐阅读