迭代Python中的多个列表列表

时间:2014-03-17 00:58:06

标签: python list

a= [ [(54, 54, 54), 
     (21, 21, 21),
     (12, 12, 12) ],
     [(22, 12, 22),
     (11, 11, 11),
     (33, 33, 33)] ]  

some_num = 10
for x in range(len(a)):
    b = list(a[x]**[0]**)
    for y in range(len(b)):
        b[y] *= some_num
    a[x] = tuple(b)
print(a)

有没有办法让迭代超过索引0(粗体)?我很好奇最好的办法是什么。我也期待这个列表增长,所以我真的在寻找一个关于如何让它迭代任意数量的列表的提示。

谢谢,

3 个答案:

答案 0 :(得分:0)

您可以使用此递归解决方案解决此问题

def rec(current_item, number):
    if isinstance(current_item, list):
        return [rec(item, number) for item in current_item]
    elif isinstance(current_item, tuple):
        return tuple(rec(item, number) for item in current_item)
    else:
        return current_item * number

a = [[[(54, 54, 54)], [(21, 21, 21)], [(12, 12, 12)]],
     [[(22, 12, 22)], [(11, 11, 11)], [(33, 33, 33)]]]

print rec(a, 5)

# [[[(270, 270, 270)], [(105, 105, 105)], [(60, 60, 60)]],
#  [[(110, 60, 110)], [(55, 55, 55)], [(165, 165, 165)]]]

a = [[(54, 54, 54), (21, 21, 21), (12, 12, 12)],
    [(22, 12, 22), (11, 11, 11), (33, 33, 33)]]

print rec(a, 5)

# [[(270, 270, 270), (105, 105, 105), (60, 60, 60)],
#  [(110, 60, 110), (55, 55, 55), (165, 165, 165)]]

答案 1 :(得分:0)

假设您的列表不是任意深度(即它是数字元组列表的列表),只需逐个元素逐步执行:

a= [ 
    [(54, 54, 54), (21, 21, 21), (12, 12, 12) ],
    [(22, 12, 22), (11, 11, 11), (33, 33, 33)] 
   ]  

num=10
nl=[]
for l in a:
    print l
    nsl=[]
    for t in l:
        print t
        nt=[]
        for x in t:
            print x
            nt.append(num*x)
            print nt
        nsl.append(tuple(nt))   
        print nsl 
    nl.append(nsl)    

print nl  
# [[(540, 540, 540), (210, 210, 210), (120, 120, 120)], [(220, 120, 220), (110, 110, 110), (330, 330, 330)]]

(我在每个级别都有print来向您展示正在发生的事情。删除使用...)

由于元组是不可变的,你必须产生新的元组来乘以元组中的每个元素。如果您在列表中列出了数字列表,则可以进行适当的修改。

如果是任意深度,请使用递归。

答案 2 :(得分:0)

你需要的是一个递归函数。

这是一个简单的例子:

a= [
 [(54, 54, 54), 
 (21, 21, 21),
 (12, 12, 12) ],
 [(22, 12, 22),
 (11, 11, 11),
 (33, 33, 33)]
 ]

def go_through(list):
    for x in list:
        if isinstance(x, list): #if is list
            #do something
            go_through(x) #loop again
        else: #if not list
            #do something else

go_through(a)

没有检查过,所以我不知道它是否有效但你明白了......