2017-07-31 84 views
-2

打印嵌套字符串是我的代碼。我在分開列表中的項目,並打印了出來:排序,並在Python

mylist = [["Orange", "Banana"], ["Grape", "Orange", "Apple"]] 

for s in mylist: 
print '\n'.join(s) 

Orange 
Banana 
Apple 
Grape 
Orange 

但我想名單按字母順序排列。我已經試過這一點,但它只是排序它們的巢穴內的物品:

for s in mylist: 
print '\n'.join(sorted(s)) 

Banana 
Orange 
Apple 
Grape 
Orange 

你怎麼打印和嵌套列表項一起排序?

+3

可能重複的[展開,刪除重複項,並在python中對列表進行排序](https://stackoverflow.com/questions/36582889/flatten-刪除重複和排序列表中的蟒蛇) –

+0

首先將嵌套列表壓縮到一起:) –

+0

@Jason,zip不是正確的函數。 –

回答

1

基本上它的扁平化組合和排序。壓扁在這裏不同的方式處理:Making a flat list out of list of lists in Python。排序是內置的。

我的版本:

使用itertools.chain然後排序鏈:

import itertools 

for i in sorted(itertools.chain.from_iterable(mylist)): 
    print(i) 

或者沒有itertools,生成一個列表理解(其中有一個傳遞到list所以sortedsorted不受益需要強制迭代):

for i in sorted([x for sl in mylist for x in sl]): 
    print(i) 

(最有效的方法可能是sorted(list(itertools.chain.from_iterable(mylist))),雖然)

+0

無需在第二個選項內部列表理解。 'sorted'可以接受一個生成器表達式:'排序(對於sl中的sl表示sl中的x表示sl)' –

+0

不需要,但它更快,因爲否則'sorted'必須迭代來構建列表並且迭代很慢。 –