我需要以下列方式迭代两个列表:
伪代码:
j=1
for i=1 to n:
print a[i], b[j]
while b[j+1] <= a[i]:
j++
print a[i], b[j]
Run Code Online (Sandbox Code Playgroud)
例如:
a = [1 3 5 7]
b = [2 4 9]
Run Code Online (Sandbox Code Playgroud)
期望的输出:
1 2
3 2
5 2
5 4
7 4
Run Code Online (Sandbox Code Playgroud)
你怎么干净地在python中做到这一点?
您的伪代码几乎可以在Python中运行.一些工作代码可以满足您的需求:
a = [1, 3, 5, 7]
b = [2, 4, 9]
j = 0
for i in range(len(a)):
print a[i], b[j]
while j<len(b)-1 and b[j+1] <= a[i]:
j += 1
print a[i], b[j]
Run Code Online (Sandbox Code Playgroud)
请注意一些变化,使其在Python中工作:
i并j应该从那里开始.len(a)返回的长度a(4在这种情况下),和迭代i通过range(len(a))执行从对于每个整数循环0到len(a)-1,这是所有在索引a.++Python不支持该操作,因此我们j +=1改为使用.b,因此我们测试以确保j在递增之前将处于边界内.通过遍历列表,可以使此代码更加pythonic,如下所示:
a = [1, 3, 5, 7]
b = [2, 4, 9]
j = 0
for element in a:
print element, b[j]
while j<len(b)-1 and b[j+1] <= element:
j += 1
print element, b[j]
Run Code Online (Sandbox Code Playgroud)
通常,您可能不希望只打印列表元素,因此对于更一般的用例,您可以创建生成器,如:
def sync_lists(a, b)
if b:
j = 0
for element in a:
yield (element, b[j])
while j<len(b)-1 and b[j+1] <= element:
j += 1
yield (element, b[j])
Run Code Online (Sandbox Code Playgroud)
然后你可以像以前一样打印它们
a = [1, 3, 5, 7]
b = [2, 4, 9]
for (e1, e2) in sync_lists(a, b):
print e1, e2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1372 次 |
| 最近记录: |