如何在不放入列表的情况下处理单行for循环?
可能这个问题有点模糊,但我想表达的是这段代码:
'livestream' : [cow.legnames for cow in listofcows]
现在的问题是,cow.legnames也是一个列表,所以当我尝试用Json返回它时,会得到一个列表里的列表。我应该怎么做才能返回一个单一的列表呢?
这是将要返回的Json:
'livestream' : [['blue leg', 'red leg']]
我希望这段代码能解释我的问题是什么。
6 个回答
1
根据我的理解,你的代码大概是这样的:
class Cow(object):
def __init__(self, legnames):
self.legnames = legnames
listofcows = [Cow(['Red Leg', 'Blue Leg']),
Cow(['Green Leg', 'Red Leg'])]
最简单的方法是扩展一个临时的列表,像这样:
legs = []
# As @delnan noted, its generally a bad idea to use a list
# comprehension to modify something else, so use a for loop
# instead.
for cow in listofcows:
legs.extend(cow.legnames)
# Now use the temporary legs list...
print {'livestream':legs}
2
这个名字 listofcows
暗示着将来可能会有很多牛。如果把一个包含多个项目的列表压平,那就不太对了。
不过,如果这个名字让人误解了(而且为什么要有一个只有一个元素的列表呢?),你有几种方法可以把它压平。
一种方法是使用嵌套的列表推导式: [legname for cow in listofcows cow.legnames for legname in cow.legnames]
另一种方法是获取第一个项目: [your list comprehension][0]
还有可能有一些我现在想不起来的标准库里的有用工具。
10
除了shahjapan提到的reduce方法,你还可以使用这种语法来把列表变得扁平。
[legname for cow in listofcows for legname in cow.legnames]