列表理解中的嵌套列表到for循环

Nested list in list comprehension to for loop

我正在参加 class 学习 python。我们在涵盖列表理解的部分中,我很难理解其中一个示例中发生的事情。我正在尝试将其转换回 for 循环以了解正在发生的事情,但我 运行 遇到了问题。

示例:1 这个我可以很好地转换成 FOR 循环。输出相同


my_list1 = [ x * y for x in [20, 40, 60] for y in [2, 4, 6]]
print('My list 1', my_list1)

my_list2 = []

for x in [20, 40, 60]:
    for y in [2, 4, 6]:
        my_list2.append(x*y)

print(my_list2)

输出

我的列表 1 [40, 80, 120, 80, 160, 240, 120, 240, 360]

我的列表 2 [40, 80, 120, 80, 160, 240, 120, 240, 360]


示例 2:我在转换为 FOR 循环时遇到问题。我的输出不同。我不知道如何获取列表以在列表中输出。第二组 [] 让我失望。我不知道他们在转换为 FOR 循环时需要去哪里才能得到列表中的列表。

你能解释一下我做错了什么吗?

my_list3 = [[x * y for x in [20, 40, 60]] for y in [2, 4, 6]]
print('My list 3', my_list3)

my_list4 = []

for x in [20, 40, 60]:
    for y in [2, 4, 6]:
        my_list4.append([x*y])


print('My list4', my_list4)

输出

我的列表 3 [[40, 80, 120], [80, 160, 240], [120, 240, 360]]

我的列表4 [[40], [80], [120], [80], [160], [240], [120], [240], [360]]

我看到它更复杂,因为他们希望您在输出中有一个列表列表。添加到 my_list4 的每个元素本身必须是一个列表。

如果作业是删除所有列表推导式,则必须一次构建一个子列表,然后将子列表添加到父列表。像这样:

for x in [20, 40, 60]:
  sublist = []  # make an empty sublist
  for y in [2, 4, 6]:
    sublist.append(x*y)  # put a single value into the sublist
  my_list4.append(sublist)  # add the completed sublist onto the parent list

虽然为了清晰起见,我更喜欢上述方法,但您也可以通过预先将空子列表添加到父列表并在添加值时不断引用它来避免创建临时列表:

for x in [20, 40, 60]:
  my_list4.append([])  # append the empty sublist to the parent list
  for y in [2, 4, 6]:
    my_list4[-1].append(x*y)  # use [-1] to reference the last item
                              # in my_list4, which is the current sublist.

您的尝试是为每个 x 和 y 的组合制作一个 one-element 列表(每个单独值周围的方括号向您显示)。