在python列表中的每个项目的字符串前面添加一个字符串

Posted

技术标签:

【中文标题】在python列表中的每个项目的字符串前面添加一个字符串【英文标题】:Adding a string in front of a string for each item in a list in python 【发布时间】:2011-01-08 23:43:43 【问题描述】:

我有一个字符串中的网站列表,如果第一个索引不是“h”,我正在执行一个 for 循环以在前面添加“http”,但是当我返回它时,列表没有改变。

n 是我的网站列表 h 是“http”

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

当我返回列表时,它返回我的原始列表并且没有附加“http”。有人可以帮帮我吗?

【问题讨论】:

如果您的列表中有以“h”开头但不是“http”的网站,则可能会考虑检查第一个字符 【参考方案1】:

这也可以使用列表推导来完成:

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

【讨论】:

【参考方案2】:

您需要重新分配列表项——字符串是不可变的,因此+= 正在创建一个新字符串,而不是改变旧字符串。即:

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

【讨论】:

【参考方案3】:
n = [True: '', False: 'http'[p.startswith('h')] + p for p in n]

不要真的这样做。虽然它确实有效。

【讨论】:

可能是因为这是一种有趣的 hacky 方式。 仅供参考:Python 现在有 if-else 表达式,因此不再需要模拟它们的 dict/sequence/and-or hack。请参阅 Max S. 的答案,了解您的去破解版本。 @Laurence:与 C 三元运算符相比,它们的“错误”让我避免使用它们,因为我不需要来自其他语言的没有经验的 Python 程序员绊倒它们。不过,这并不是使用 dict 的理由......【参考方案4】:
>>> n=["abcd","http","xyz"]

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

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

【讨论】:

将因空字符串而失败。但希望不会有太多这样的人。 你试过了吗? :-) 在这种情况下使用[:1] 而不是[0] 不,我以为我看到了逻辑问题,但在这种特殊情况下我错了。如果条件是x[:1]!='h',那么它就会失败。 是的 :-) 这就是 and or 的工作方式,如您所知,我特意在这种情况下使用 =='h',以避免 '' 转到 and 部分

以上是关于在python列表中的每个项目的字符串前面添加一个字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何为列表中的每个项目添加一个布尔值?

在 Python 中添加一个字符串

如何在 Python 中的字符串中的数字前面添加“+”号?

Python实践练习:在 Wiki 标记中添加无序列表

将字符串添加到 python 列表的每个元素

在 Wiki 标记中添加无序列表