gpt4 book ai didi

python - 迭代两个列表并同步它们

转载 作者:太空宇宙 更新时间:2023-11-03 12:50:15 24 4
gpt4 key购买 nike

我需要按以下方式迭代两个列表:

伪代码:

j=1
for i=1 to n:
print a[i], b[j]
while b[j+1] <= a[i]:
j++
print a[i], b[j]

例如:

a = [1 3 5 7]
b = [2 4 9]

期望的输出:

1 2
3 2
5 2
5 4
7 4

如何在 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]

请注意使其在 Python 中工作的一些更改:

  1. 声明列表时,项目之间需要逗号。
  2. 列表索引从 0 开始,所以 ij 都应该从那里开始。
  3. len(a) 返回 a 的长度(在本例中为 4),并通过 range(len (a)) 对从 0len(a)-1 的每个整数执行循环,这是 a< 中的所有索引
  4. Python不支持++操作,所以我们使用j +=1代替。
  5. 我们必须避免使用 b 的越界索引,因此我们进行测试以确保 j 在递增之前在范围内。

通过如下遍历列表,可以使这段代码更符合 Python 风格:

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]

通常,您可能不想只打印列表元素,因此对于更一般的用例,您可以创建 generator ,比如:

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])

然后你可以像以前一样打印它们

a = [1, 3, 5, 7]
b = [2, 4, 9]
for (e1, e2) in sync_lists(a, b):
print e1, e2

关于python - 迭代两个列表并同步它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com