如果我有一个如下列表:
set = [[1, 3, **4**, 10], [2, 4, **7**, 1], [1, 4, **4**, 8]]
我想做一个循环,它会为每个子列表重复X次,其中X是每个列表的第3个数字。
例如,绘制正方形 4 次,然后绘制 7 次,然后绘制 4 次。
我不是在寻找如何生成示例的代码,而只是解释如何告诉我的循环基于a x 次做某事列表中某个位置的数字。
答案 0 :(得分:2)
有两种等效的逻辑结构方法。您选择的内容取决于背景和功能的性质。
lst = [[1, 3, 4, 10], [2, 4, 7, 1], [1, 4, 4, 8]]
选项1
正如评论中所建议的那样,使用嵌套的for
循环。
def f(x):
print(x)
for sublst in lst:
for _ in range(sublst[2]):
f(sublst)
选项2
向您的函数添加参数n
,并将for
循环移动到正在执行的函数。
def f(x, n):
for _ in range(n):
print(x)
for sublst in lst:
f(sublst, sublst[2])
虽然通常建议是“每个函数应该做一件事”,如果函数的本质是运行一定次数,那么第二个选项可能是可行的。
此外,不要在课后命名变量,例如set
不是变量名称的好选择。
答案 1 :(得分:1)
所以,你有一份清单,对吗?
your_set = [[1, 3, 4, 10], [2, 4, 7, 1], [1, 4, 4, 8]] # naming a variable with a keyword argument is not a smart move btw
for iter_list in your_set:
for _ in range(iter_list[POSITION_OF_THE_NUM_YOU_WANT]):
DO_SOMETHING()
答案 2 :(得分:1)
您可以在python中使用地图功能:
set = #your list
def func(ll):
return ll[2]
map(func, set)
答案 3 :(得分:1)
我不确定我理解你的问题,但如果我这样做,那么以下内容应该有效:
# Create your input set.
my_set = [[1, 3, 4, 10], [2, 4, 7, 1], [1, 4, 4, 8]]
# Define a generic function. It sounds like you might use draw_square here.
def do_something():
print("Doing something!")
# Loop through each list in your input.
for input_list in my_set:
# Use the third element of the list to determine how many times
# to do something (draw squares in your case).
num_actions = input_list[2]
for _ in range(num_actions):
# This could be a function or any other logic you want.
do_something()
此代码将循环遍历my_set中的每个列表,并且每个列表将调用函数do_something x次,其中x是列表的第三个元素。
答案 4 :(得分:0)
只需收集第3个元素,然后将其用作范围int:
set_1 = [[1, 3, 4, 10], [2, 4, 7, 1], [1, 4, 4, 8]]
#fake data
def print_hello(x):
return x[::-1]
#collecting the 3rd element
data=map(lambda x:x[2],set_1)
#3rd element times
for i in data:
for k in range(i):
print(print_hello('hello_world'))
输出:
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh
dlrow_olleh