我有一個字符串中的網站列表,如果第一個索引不是「 h「,但是當我返回時,列表並沒有改變。在Python中爲列表中的每個項目添加一個字符串
n是我的網站名單 h是「HTTP」
for p in n:
if p[0]!="h":
p= h+ p
else:
continue
return n
當我返回列表,它返回我原來的列表,並沒有追加的「HTTP」。有人能幫助我嗎?
我有一個字符串中的網站列表,如果第一個索引不是「 h「,但是當我返回時,列表並沒有改變。在Python中爲列表中的每個項目添加一個字符串
n是我的網站名單 h是「HTTP」
for p in n:
if p[0]!="h":
p= h+ p
else:
continue
return n
當我返回列表,它返回我原來的列表,並沒有追加的「HTTP」。有人能幫助我嗎?
這也可以使用列表理解來完成:
n = [i if i.startswith('h') else 'http' + i for i in n]
您需要重新分配列表項 - 字符串是不可變的,所以+=
正在創建一個新字符串,而不是突變舊字符串。即:
for i, p in enumerate(n):
if not p.startswith('h'):
n[i] = 'http' + p
n = [{True: '', False: 'http'}[p.startswith('h')] + p for p in n]
並不真正做到這一點。雖然它確實工作。
那麼你爲什麼要建議呢? – Escualo 2010-01-25 06:24:38
可能是因爲這是一種有趣的做法。 – 2010-01-25 06:26:24
只是FYI:Python現在有if-else表達式,所以dict/sequence /和 - 或者hack模擬它們不再是必需的。請參閱Max S.的回答,瞭解您的黑客版本。 – 2010-01-25 06:43:38
>>> n=["abcd","http","xyz"]
>>> n=[x[:1]=='h' and x or 'http'+x for x in n]
>>> n
['httpabcd', 'http', 'httpxyz']
將失敗的空字符串。但希望不會有太多的人。 – 2010-01-25 06:34:35
你試過了嗎? :-)在這種情況下,使用'[:1]'而不是'[0]'。 – YOU 2010-01-25 06:35:02
不,我認爲我看到了邏輯問題,但在這個特定情況下我錯了。如果條件是'x [:1]!='h''那麼它就會失敗。 – 2010-01-25 06:45:14
可能會考慮檢查過去的第一個字符,如果你的列表中有網站以「h」的開始,但不是「HTTP」 – hexparrot 2012-10-20 15:12:22