2017-08-23 47 views
0

我不太確定如何將其加入,這可能是Google爲什麼沒有幫助。但說我有以下幾點:構建一個包含默認項目的列表

a = ['begin', 'end'] 
for x in range(10): 
    a.insert(-1, x) 
print(a) 

輸出:

['begin', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'end'] 

我怎麼會做出與默認項目['begin', 'end']列表理解等於上面的輸出列表?

編輯:

我的意思默認的項目是,無論「開始」和「結束」,你可以使用列表解析生成的「開始」和「端之間的數字「永遠是他們的地方。

最接近的答案,我的問題是@ whackamadoodle3000誰基本上是做了以下雖然不完全:

result = ['start'] + [x for x in range(10)] + ['end'] 

我混亂的根源是,我想我可以做的一切,在列表理解是這樣的:

result = [['start'] + [x for x in range(10)] + ['end']] 

另外我忘了你可以合併列表與加法運算符。

+0

目前還不清楚你在問什麼。 「用列表構造函數」是什麼意思? 「默認項目」是什麼意思?如果你想寫一個函數,你能顯示調用函數的樣子嗎? – user2357112

+1

你的代碼片段根本不起作用。 – innisfree

+0

這聽起來像是你的問題可能只是你的示例代碼中的錯誤 - 你忘記將列表保存到'x'變量,並且你的循環應該是'for in ...'而不是'for x in .. .',因爲你的循環體將循環變量稱爲'a',而不是'x'。 – user2357112

回答

1
default = ['begin', 'end'] 
result = [default[0]] + [x for x in range(10)] + [default[1]] 

這應該工作

+0

'result = [default [0]] + [x for range(10)] + [default [1]]' – innisfree

+0

好的,編輯 –

2

爲什麼不創建產生「開始」,所提供的可迭代的兩側「結束」的功能。

def markedrange(iterable, markers=('start', 'end')): 
    yield markers[0] 
    yield from iterable 
    yield markers[1] 

print(list(markedrange(range(10)))) 
print(list(markedrange(['a', 'b', 'c', 'd'], markers=('hi', 'bye')))) 

結果:

['start', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'end'] 
['hi', 'a', 'b', 'c', 'd', 'bye'] 

如果你是一個較舊的Python版本和你沒有yield from,則應該在一個循環中產生。

例如

for i in iterable: 
    yield i 
+1

你應該提到這隻適用於3.3+。 –

+0

沒問題。我認爲這不是你想要的,因爲它不使用列表理解(?)。然而,它的優點是不需要創建臨時列表來追加到生成列表的開始和結尾。 –

+0

@PaulRooney最初我想知道我是否可以在列表理解中做到這一點,但您的答案確實提供了另一個最受讚賞的角度。 –

相關問題