2010-01-25 78 views
8

我有一個字符串中的網站列表,如果第一個索引不是「 h「,但是當我返回時,列表並沒有改變。在Python中爲列表中的每個項目添加一個字符串

n是我的網站名單 h是「HTTP」

for p in n: 
    if p[0]!="h": 
     p= h+ p 
    else: 
     continue 
return n 

當我返回列表,它返回我原來的列表,並沒有追加的「HTTP」。有人能幫助我嗎?

+0

可能會考慮檢查過去的第一個字符,如果你的列表中有網站以「h」的開始,但不是「HTTP」 – hexparrot 2012-10-20 15:12:22

回答

14

這也可以使用列表理解來完成:

n = [i if i.startswith('h') else 'http' + i for i in n] 
4

您需要重新分配列表項 - 字符串是不可變的,所以+=正在創建一個新字符串,而不是突變舊字符串。即:

for i, p in enumerate(n): 
    if not p.startswith('h'): 
    n[i] = 'http' + p 
0
n = [{True: '', False: 'http'}[p.startswith('h')] + p for p in n] 

並不真正做到這一點。雖然它確實工作。

+1

那麼你爲什麼要建議呢? – Escualo 2010-01-25 06:24:38

+2

可能是因爲這是一種有趣的做法。 – 2010-01-25 06:26:24

+0

只是FYI:Python現在有if-else表達式,所以dict/sequence /和 - 或者hack模擬它們不再是必需的。請參閱Max S.的回答,瞭解您的黑客版本。 – 2010-01-25 06:43:38

0
>>> n=["abcd","http","xyz"] 

>>> n=[x[:1]=='h' and x or 'http'+x for x in n] 

>>> n 
['httpabcd', 'http', 'httpxyz'] 
+0

將失敗的空字符串。但希望不會有太多的人。 – 2010-01-25 06:34:35

+0

你試過了嗎? :-)在這種情況下,使用'[:1]'而不是'[0]'。 – YOU 2010-01-25 06:35:02

+0

不,我認爲我看到了邏輯問題,但在這個特定情況下我錯了。如果條件是'x [:1]!='h''那麼它就會失敗。 – 2010-01-25 06:45:14

相關問題