python - “如何不均匀地迭代两个列表”
问题描述
对于我遇到的这个非常具体的问题,我找不到解决方案。本质上,我有两个列表,每个列表有两个元素:[A,B] 和 [1,2]。我想创建一个嵌套循环,在第二个列表上迭代和扩展,并在每次迭代后添加第一个列表的每个元素。
最后我想看到的是这样的:
A B
1 A
1 B
2 A
2 B
1 1 A
1 2 A
2 1 A
2 2 A
1 1 B
1 2 B
2 1 B
2 2 B
1 1 1 A
1 1 2 A
...
我的问题是我这样做的尝试递归地将 A 和 B 分开,以便出现这种模式(也请注意不同的第一行):
A
1 A
2 A
1 1 A
1 2 A
2 1 A
2 2 A
1 1 1 A
1 1 2 A
...
B
1 B
2 B
1 1 B
1 2 B
2 1 B
2 2 B
1 1 1 B
1 1 2 B
...
如何将 A 和 B 保持在一起?
这是代码:
def second_list(depth):
if depth < 1:
yield ''
else:
for elements in [' 1 ', ' 2 ']:
for other_elements in list (second_list(depth-1)):
yield elements + other_elements
for first_list in [' A ', ' B ']:
for i in range(0,4):
temp=second_list(i)
for temp_list in list(temp):
print temp_list + first_list
解决方案
我会尝试以下风格的东西:
l1 = ['A', 'B']
l2 = ['1', '2']
def expand(l1, l2):
nl1 = []
for e in l1:
for f in l2:
nl1.append(f+e)
yield nl1[-1]
yield from expand(nl1,l2)
for x in expand(l1, l2):
print (x)
if len(x) > 5:
break
注意:您输出的第一行似乎不是同一规则的产物,因此这里没有生成,您可以根据需要手动添加它。
注意2:不构建新生成元素的列表会更优雅,但是你必须计算它们两次。
推荐阅读
- python - 如何使用算法 rijndael 256 和模式 ECB 在 python 中发送加密请求?
- php - SF4 身份验证工作但未保存令牌(从未调用序列化)
- javascript - Vue:是否可以在自定义指令中设置数据变量
- php - 即使条件匹配,PHP preg_match 也会返回 false
- android - 为什么地点 api 不搜索多个地点类型?
- jmeter - 如何从 Jmeter 中的 Jtl 文件生成可理解的图形?
- oop - 业务逻辑和规则——如何将它们与域模型解耦
- python - 在 Python 中编写多个决策的最佳方法
- php - woocommerce 在我的帐户的菜单导航上添加字幕
- python - 如果在 Openpyxl 中整行为空,则向上移动单元格