我有一个字符串中的网站列表,如果第一个索引不是“ 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