10
首先請原諒我有點不好的標題。我不太確定該怎麼說。如果有人可以建議一個更好的標題,那就太棒了。Python列表理解拆分循環變量
我想知道是否有辦法將列表理解的每個迭代的值分割一次,但在輸出中使用它兩次。我試圖解決這個問題的一個例子是:
我有串
a = "1;2;4\n3;4;5"
而且我想執行此:
>>> [(x.split(";")[1],x.split(";")[2]) for x in a.split("\n") if x.split(",")[1] != 5]
[('2', '4'), ('4', '5')]
在不需要運行分裂三次。因此,像這樣(這顯然是無效的語法,但希望是足以讓整個消息):
[(x[1],x[2]) for x.split(";") in a.split("\n") if x[1] != 5]
在這個問題上,我不尋找花哨的方式來獲取字符串的第2和第3列。這只是提供具體例子的一種方式。我能爲課程的例子使用:
[x.split(";")[1:3] for x in a.split("\n")]
我已經想到了可能的解決方案:
- 不使用列表理解
- 將它保持不變
- 使用csv.DictReader ,命名我的專欄和類似StringIO的東西給它輸入。
這主要是一些可以使用而不是特定情況的好模式,所以它很難回答「你爲什麼要這樣做」或「這是什麼」有點問題
感謝提前:)
UPDATE:是讀解下面我去跑一些速度測試之後。我在非常基本的測試中發現,所提供的解決方案比上述天真的解決方案快35%。
感謝非常酷:) – Nick 2012-04-25 04:06:29