列表理解中的多个循环

Multiple loop in list comprehension

我手头有个问题集,描述是这样的:

我们有 2 个列表,即“nums1”和“nums2”以及 2 个整数 m 和 n

nums1 = [1, 2, 3, 7, 8, 9]
m = 3
nums2 = [2, 5, 6]
n = 2

此处“m”表示要从“nums1”中选取的元素数,“n”表示要从“nums2”中选取的元素数。 当然还有其他方法,但我想在上述条件下创建一个只有 "list comprehension" 的列表。

通过一个简单的 for 循环,我可以通过以下方式实现:

li = []
for i in range(m):
  li.append(nums1[i])
for j in range(n):
  li.append(nums2[j])
print(li)

我尝试了以下方法,但结果不如预期:

[a for a in nums1 for b in nums2]

预期输出: [1, 2, 2, 3, 5]

另外,列表解析是否支持多循环?

鉴于以下情况:

nums1 = [1, 2, 3, 7, 8, 9]
m = 3
nums2 = [2, 5, 6]
n = 2

严格使用列表推导式,下面的内容将满足您的要求:

sorted([nums1[a] for a in range(m)] + [nums2[b] for b in range(n)])

Returns:

[1, 2, 2, 3, 5]

as per the conditions with "List comprehension" to be specific.

虽然正如其他人在评论中所说的那样,切片会更像 pythonic 并且更容易推理。但是既然你要求列表理解实现,那么这就是你将得到的答案。

nums1 = [1, 2, 3, 7, 8, 9]
m = 3
nums2 = [2, 5, 6]
n = 2

ll = sorted([a for b in [nums1[:m], nums2[:n]] for a in b])

print(ll)

输出

[1, 2, 2, 3, 5]
nums1 = [1, 2, 3, 7, 8, 9]
m = 3
nums2 = [2, 5, 6]
n = 2

如果稍后需要在程序中访问返回值,请创建一个空列表并将返回值存储在此列表中

nums3 = []
[nums3.append(nums1[i]) for i in range(m)]
[nums3.append(nums2[i]) for i in range(n)]

排序并打印新创建的列表

print(sorted(nums3))