2015-11-14 49 views
0

我正在解決一個需要特定排序的問題,即我在函數MyFn中寫的,但Python中的sorted的結果是一個列表。是否可以返回字符串而不使用joinsorted(s, key=MyFn)沒有轉換爲數組的字符串排序

+0

'sorted'返回一個列表,所以沒有,這是不可能的。 – vaultah

+0

如果你的字符串's'是'bytearray',那麼它有可能:'s [:] = sorted(s,key = MyFn)'。 –

+0

爲什麼不使用'''.join'? Python明確提供了兩種排序方法,實際上它們是相同的方法。 'list.sort'和'sorted'。這就是它。'sorted'在內部實現爲'tmp = list(iterable); tmp.sort();返回tmp',因此,只有一個真正的排序。 – ShadowRanger

回答

3

這是不可能的,因爲sorted()旨在返回一個列表。

但是,您可以使用.join()將其轉換回字符串。

s_list = sorted(s, key=MyFn) 
s_str = "".join(s_list) 

如果您不能使用.join(),還有另一種途徑,但是這是一個有點棘手,我強烈不推薦它。您可以使用repr()到您的列表轉換爲字符串,然後感謝切片,你可以從這個列表中得到的字母:

s_str = repr(sorted(s, key=MyFn))[2::5] 

作爲一個字符列表的表示是像['s', 't', 'r', 'i', 'n', 'g'],這應該工作。

+1

我不能使用'join',我只能使用一次排序:) –

+1

@Bob爲什麼你不能?請問,你使用的是Python 2還是Python 3? – Delgan

+0

不能使用,因爲它是一個任務,但我可以使用Python 2或3 –

0

是否可以返回字符串而不使用join

是的,這是可能的,但它的速度慢

src = ['a', 'b', 'c'] 
dest = '' 

for c in src: 
    dest += src 

print(dest) 

或者與functools.reduce

from functools import reduce 
src = ['a', 'b', 'c'] 
dest = reduce(str.__add__, src) 
print(dest)