2009-10-01 66 views
2

我是Python的新手。考慮函數str.partition(),它返回一個3元組。如果我只對這個元組的元素0和元素2感興趣,那麼從這個元組中挑選某些元素的最好方法是什麼?如何挑選函數返回的x元組的某些元素?

我現在可以做兩種:

# Introduces "part1" variable, which is useless 
(part0, part1, part2) = str.partition(' ') 

或者:

# Multiple calls and statements, again redundancy 
part0 = str.partition(' ')[0] 
part2 = str.partition(' ')[2] 

我希望能夠做東西這個樣子,但不能:

(part0, , part2) = str.partition(' ') 
# Or: 
(part0, part2) = str.partition(' ')[0, 2] 

回答

13

下劃線經常被用來作爲東西你並不需要一個名字,所以像這樣的工作:

part0, _, part2 = str.partition(' ') 

在這種特殊情況下,你可以這樣做,但它不是一個漂亮的解決方案:

part0, part2 = str.partition(' ')[::2] 

更深奧的解決方案:

from operator import itemgetter 
part0, part2 = itemgetter(0, 2)(str.partition(' ')) 
+1

作爲變量名的下劃線非常酷!多好的一招! :-) – 2009-10-01 07:59:07

+0

你不能擁有那種'通配符'語法。 – SilentGhost 2009-10-01 15:38:27

+1

請注意,_經常被gettext使用,所以你可能不想這樣做。 – 2009-10-01 19:46:23

2

我想我前一段時間問的問題可以幫助你:

Pythonic way to get some rows of a matrix

NumPy的給你,你想用一個元組或索引列表中提取各種元素切片的語法,但我不認爲你想你的字符串列表轉換爲numpy.array只是提取少量的元素,所以也許你可以寫一個幫手:

def extract(lst, *indices): 
    return [lst[i] for i in indices] 

item0, item2 = extract(str.partition(' '), 0, 2) 
+0

這是一個好的選擇。感謝分享! :-) – 2009-10-02 02:25:10

4

正確的,你不能把一些特設的元素出來的元組的列表中一氣呵成。

part0, part1, part2 = str.partition(' ') 

是要走的路。不要擔心part1,如果你不需要它,你不需要它。通常將其稱爲「虛擬」或「未使用」以表明它未被使用。

你可以醜陋:

part0, part2 = str.partition(' ')[::2] 

在這種特殊情況下,但這是混淆和對他人的不好聽。 ;)

1

你也可以使用str.split(' ', 1)而不是str.partition(' ')

你會得到一個列表,而不是一個元組,但你不會得到分離回

+0

它會很慢 – SilentGhost 2009-10-01 15:36:49

0

這是我會怎麼做:

all_parts = str.partition(' ') 
part0, part2 = all_parts[0], all_parts[2] 
相關問題