也許問題有點模糊,但我的意思是這樣的代碼:如何處理一行循環而不將其放入列表中?
'livestream' : [cow.legnames for cow in listofcows]
現在的問題是cow.legnames也是一個列表,所以我會得到一個名單列表中,當我嘗試返回它與Json。我應該如何使它返回一個列表。
這是將被返回的json。
'livestream' : [['blue leg', 'red leg']]
我希望代碼解釋我的問題是什麼。
也許問題有點模糊,但我的意思是這樣的代碼:如何處理一行循環而不將其放入列表中?
'livestream' : [cow.legnames for cow in listofcows]
現在的問題是cow.legnames也是一個列表,所以我會得到一個名單列表中,當我嘗試返回它與Json。我應該如何使它返回一個列表。
這是將被返回的json。
'livestream' : [['blue leg', 'red leg']]
我希望代碼解釋我的問題是什麼。
除了shahjapan的減少,你可以使用這個語法來拉平列表。
[legname for cow in listofcows for legname in cow.legnames]
+1也打我吧。 – aaronasterling 2010-08-19 18:52:50
我沒有時間測試這個答案了。但我猜這是正確的答案。我會盡快接受你的答案,但我現在很忙。儘管感謝您的回答。欣賞它。 – 2010-08-24 16:22:33
完美的作品。這是我想要這樣做的方式。不知道我能在一行中做2循環;) – 2010-08-29 16:03:31
從我的理解,你有這樣的事情:
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}
名稱listofcows
意味着可能出現,有可能未來,幾頭奶牛。用一個以上的項目壓扁列表將是錯誤的。
但是,如果名稱具有誤導性(爲什麼還要列出一個單子列表?),您有幾個選項可以使它變平。
嵌套列表理解:[legname for cow in listofcows cow.legnames for legname in cow.legnames]
獲得的第一項:[your list comprehension][0]
而且很可能一些有用的啄標準庫中我不記得現在。
至於「有用的東西」,我認爲你正在考慮'sum(nested_list,[])' – 2010-08-19 17:47:20
這是你在找什麼?
'livestream' : [cow.legnames[0] for cow in listofcows]
不,看起來Joe的答案是最合適的,因爲在這裏使用理解列表不太好。 – 2010-08-19 17:44:42
你可以嘗試減少,
'livestream' : reduce(lambda a,b:a+b,[cow.legs for cow in listofcows])
如果您需要獨特的腿部上設置
'livestream' :list(set(reduce(lambda a,b:a+b,[cow.legs for cow in listofcows])))
爲了不太模糊,你舉一個關於命名你的牛的腿的例子嗎? – 2010-08-19 17:29:26
您的語法'string_constant:list_comprehension'是特有的;這是一個字典中的項目?爲了避免疑問,如果您至少給出了一個語法正確的語句而非片段,這將非常有幫助。 – 2010-08-19 19:51:50