从具有列表理解的项目列表中获取所有子项目
Getting all subitems from a list of items with list comprehension
我有一个数据类 foo
,它有一个成员 item_li: list[item]
,item 是一个数据类,它有一个成员 sub_item_li: list[sub_item]
我想从 foo
的方法中 return list[sub_item]
。我主要是在寻找具有列表理解力的解决方案。
我已经使用以下列表理解将其分为两行:
sub_item_li_li: list[list[sub_item]] = [sub_item_li for sub_item_li in [item.sub_item_li for item in self.item_li]]
all_sub_item_li: list[sub_item] = [sub_item for sublist in sub_item_li_li for sub_item in sublist]
return all_sub_item_li
有没有一种无需先创建列表列表即可实现的方法?
很难帮助解决确切的问题,因为我们不知道 item
和 sub_item
是如何实现的。因此,我们可以采取更通用的方法:将此视为列表列表的问题,我们希望使用 list
理解来展平该列表。
所以像这样的东西应该适用于:
# Based on problem statmenet, this is a DOUBLY nested list. So
# list of one item, each item containing a list of another item.
# Let's try to apply that as generically as possible.
aa = [1, 2, 3]
bb = [4, 5, 6]
a = [aa, bb]
# But what are we working with here?
print(a)
# [[1, 2, 3], [4, 5, 6]]
# flatten out list of lists into one master list
result = [sube for e in a for sube in e]
print(result)
# [1, 2, 3, 4, 5, 6]
Oli 回答了问题:
return [sub_item for item in self.item_li for sub_item in item.sub_item_li]
我有一个数据类 foo
,它有一个成员 item_li: list[item]
,item 是一个数据类,它有一个成员 sub_item_li: list[sub_item]
我想从 foo
的方法中 return list[sub_item]
。我主要是在寻找具有列表理解力的解决方案。
我已经使用以下列表理解将其分为两行:
sub_item_li_li: list[list[sub_item]] = [sub_item_li for sub_item_li in [item.sub_item_li for item in self.item_li]]
all_sub_item_li: list[sub_item] = [sub_item for sublist in sub_item_li_li for sub_item in sublist]
return all_sub_item_li
有没有一种无需先创建列表列表即可实现的方法?
很难帮助解决确切的问题,因为我们不知道 item
和 sub_item
是如何实现的。因此,我们可以采取更通用的方法:将此视为列表列表的问题,我们希望使用 list
理解来展平该列表。
所以像这样的东西应该适用于:
# Based on problem statmenet, this is a DOUBLY nested list. So
# list of one item, each item containing a list of another item.
# Let's try to apply that as generically as possible.
aa = [1, 2, 3]
bb = [4, 5, 6]
a = [aa, bb]
# But what are we working with here?
print(a)
# [[1, 2, 3], [4, 5, 6]]
# flatten out list of lists into one master list
result = [sube for e in a for sube in e]
print(result)
# [1, 2, 3, 4, 5, 6]
Oli 回答了问题:
return [sub_item for item in self.item_li for sub_item in item.sub_item_li]