如何用一个 for 循环迭代两个列表?

By simon at 8 天前 • 0人收藏 • 7人看过

给定两个随机大小的列表,如何只用一个列表就可以从两个列表中提取项为了循环? 前提条件是,除了下面的例子中的函数之外,您还可以看到Math.floor及Math.ceil是可用的,因此没有枚举,拉链,没有如果陈述书或类似的助手。

X [1,2,3] y ['a','b','c','d'] xy len (x) * len (y) for i in range (xy) : xi x [ ceil (((xy-i) / len (y))-1] yi'?' 打印(i,xi,yi)03? 13? 23? 33? 42? 52? 62? 72? 8点1分? 91? 10点1分? 111?

期望产出:

01 a 1 b 2 c 31 d 42 a 52 b 62 c 72 d 83 a 93 b 103 c 113 d
2 个回复 | 最后更新于 8 天前
8 天前   #1

你的方式应该这样做是使用迭代工具,并采取产品(命名为笛卡儿积)在你的列表之间。 注意,可以使用 enumerate 获取迭代器同时迭代。

在枚举中导入 i,(f,s)的 itertools (itertools.product (x,y)) : print (i,f,s)

在问题的约束下。

X [1,2,3,4] y ['a','b','c'] for i in range (len (x) * len (y)) : f x [ i% len (x)] s y [ i / len (x)] print (i,f,s)

给予

01 a 12 a 23 a 34 a 41 b 52 b 63 b 74 b 81 c 92 c 103 c 114 c

我不知道你为什么认为你需要天花板及地板来做这个。 如果要导入任何内容,请导入迭代工具。 否则,就像上面那样做

8 天前   #2

你可以像这样使用枚举(),内部生成器返回一个成对的笛卡儿积,我们可以简单地在循环时使用它。

X [1,2,3] y ['a','b','c','d'] for index,(item1,item2) in enumerate (((i,j) for i in x for j in y)) : print (f"{ index }{ item1}{ item2}")

输出:

01 a 1 b 2 c 31 d 42 a 52 b 62 c 72 d 83 a 93 b 103 c 113 d

登录后方可回帖

Loading...