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(粗体)?我很好奇最好的办法是什么。我也期待这个列表增长,所以我真的在寻找一个关于如何让它迭代任意数量的列表的提示。
谢谢,
答案 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)
没有检查过,所以我不知道它是否有效但你明白了......