2010-01-25 54 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

相关问题