2017-04-15 26 views
0

通常我會列出一些常量文本值列表。我當然不希望自己輸入很多逗號和引號!什麼是創建文本項列表的pythonic成語?

我已經解決了這個習慣用法:使用三重引號創建一個多行字符串,每行上有一個文本條目,從而創建一個字符串常量與新行字符(從我按時),和然後,我各執換行,並刪除它們是空白的(只是換行)的字符串的第一個和最後一行:

colors = """ 
black 
brown 
Salmon 
red 
Orange Red 
Dark Goldenrod 
Dark Olive Green 
Chartreuse 
navy 
blue 
Deep Pink 
Dark Violet 
""".split("\n")[1:-1] 

是否有人有更好的方式

+1

你應該考慮一個適當的IDE,像PyCharm,它可以讓你做像多行編輯的花哨的東西。這樣就可以很容易地將所有單詞寫在單獨的行中,然後將它們全部用引號括起來,並一次性添加逗號。 – schwobaseggl

+0

謝謝@schwobaseggl。是的,我一直在尋找最好的,但最輕的編輯器來補充我正在寫的語言。但同時,我也喜歡在我(或我的學生)使用默認語言時優雅地使用該語言,無處不在的編輯器。 – talkaboutquality

+0

我不認爲有比你可能使用不同的分隔符字符然後換行符更好的方法。您可以通過不添加第一個和最後一個換行符來避免切片,但這不會提高可讀性。 – schwobaseggl

回答

1

除了列表初始值設定項之外,沒有官方或非官方的「成語」。它的可讀性不錯(Python的一個目標是可讀性),在一般情況下不需要任何其他的代碼可理解性。

如果這對你來說不夠好,可以隨意使用任何你能想到的方法。一些選項:

  • 的你給分多串就好
  • 如果您的列表很長(的地步它採取非常多的空間疼代碼的可讀性),它可以移動到一個單獨的文件(再次,格式是任何方便你的工作,不要過度綁定它)
+0

我接受了這個答案作爲答案,因爲它總結並證明了其他答案,這些答案本身是非常值得讚賞的細節。 – talkaboutquality

0

這是一個可以打印上面列表的替代方法。

colors = ("black,brown,Salmon,red,Orange Red,Dark Goldenrod," 
      "Dark Olive Green,Chartreuse,navy,blue,Deep Pink,Dark Violet" 
      .split(',')) 
for color in colors: 
    print(color) 
+0

Thanks @ terry-jan-reedy,但對於我來說打字要比逗號更容易。 – talkaboutquality

0

最簡單的解決方案就是使用空格和.split()。

請注意,如果python字符串是單個括號分組的一部分,它們將自動連接在一起。請參閱以下內容:

colors = ("white blue black red green " 
"teal pink orange").split() 
print(colors) 

['white', 'blue', 'black', 'red', 'green', 'teal', 'pink', 'orange']

如果你在你的個人空間字符串你最好使用其它字符將它們分開。我個人喜歡' - '。 EG:

colors = ('white-black-blue-dark orange-chartruse-' 
"green-robin's egg blue").split('-') 
print(colors) 

['white', 'black', 'blue', 'dark orange', 'chartruse', 'green', "robin's egg blue"]

如果你真的想要一個單獨的行每串,爲什麼不使用三引號像這樣:

'''white 
blue 
dark orange'''.split('\n') 

然後,您就不必在任何空白項名單。

+1

你是對的。我相應地編輯了我的答案。 –

1

在評論中添加@talkaboutquality請求的答案。我通過配置文件進行的修改非常簡單,我假設在更大的項目中(即使它僅適用於您的學生)提出了這個建議,但將一長串參數作爲字符串傳遞給它是非常不潔的/混亂的源代碼。所以我的建議是簡單的:現在

#content of config.txt 
black 
brown 
Salmon 
red 
Orange Red 
Dark Goldenrod 
Dark Olive Green 
Chartreuse 
navy 
blue 
Deep Pink 
Dark Violet 

,從Python代碼

fn=open("config.txt"); 
lines=fn.readlines(); 
colors=[x.strip() for x in lines]; 

當然,你可以封裝此三行代碼像loadColor(fn)的功能,這將使它明確爲您的學生。這樣,您可以添加/刪除顏色,而無需修改源代碼。這主要是基於我的想法,也許我剛剛從C++項目中學習了這種習慣,其中以鍵/值或腳本形式(例如,例如 lua腳本)的配置文件使生活更輕鬆。

+2

由於OP期望更優雅地使用一種語言,或許''open('config.txt')作爲f:colors = [x.strip()for x in f]'? –

+1

當然這會更好。 – Ash

相關問題