在Python中的给定索引处将一些字符串插入给定字符串

jam*_*mes 60 python string

我是Python面临问题的新手:如何在现有字符串中插入一些字段?

例如,假设我从任何包含以下内容的文件中读取了一行:

line = "Name Age Group Class Profession"
Run Code Online (Sandbox Code Playgroud)

现在我必须在Class字段之前的同一行中插入第3个Field(Group)3次.这意味着输出行应该是:

output_line = "Name Age Group Group Group Group Class Profession"
Run Code Online (Sandbox Code Playgroud)

我可以轻松地检索第三个字段(使用split方法),但请告诉我插入字符串的最简单方法?

bgp*_*ter 121

经常咬新Python程序员,但其他海报还没有做出明确的重要一点是,在Python中的字符串是不可变的-你不能永远改变他们的地方.

在使用Python中的字符串时,您需要重新训练自己,而不是思考"如何修改此字符串?" 相反,你正在思考"我怎么能创建一个新的字符串,其中包含一些我已经获得过的片段?"

  • 这并没有真正原谅Python没有索引插入或替换!输出可能只是一个包含所需结果的新字符串. (24认同)
  • @Zakum,我明白你的观点,但是有先例,例如str.strip().没有仔细阅读文档的开发人员可能会认为strip()在原始文件上运行. (8认同)
  • @CodieCodeMonkey Python Zen提到'明确比隐含更好'.您希望开发人员知道他将处理副本.否则,他肯定会遇到对象身份问题,这对调试来说是令人沮丧的.思考字符串 - 思考功能. (5认同)
  • “我怎样才能创建一个新的字符串,其中包含我已经得到的这个字符串的一些片段?”好吧,但是_如何_? (4认同)
  • 这在没有一行代码的情况下回答了这个问题。正确心态的力量。 (2认同)
  • 它根本没有回答问题,因为OP的问题已经解决了。 (2认同)
  • @jchnxu 这个问题措辞不好,但答案完全错过了问题的明显要点,他想生成一个带有插入字符串的字符串。只要他也回答了问题的明显精神,迂腐的人就可以了。 (2认同)

小智 92

为了解决这个问题的未来"新手",我认为快速回答将适合这个问题.

就像bgporter所说:Python字符串是不可变的,因此,为了修改字符串,你必须使用你已经拥有的部分.

在以下示例中,我插入'Fu''Kong Panda',以创建'Kong Fu Panda'

>>> line = 'Kong Panda'
>>> index = line.find('Panda')
>>> output_line = line[:index] + 'Fu ' + line[index:]
>>> output_line
'Kong Fu Panda'
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,我使用索引值将字符串"切片"为2个子字符串:1包含插入索引之前的子字符串,另一个包含其余字符串.然后我只是在两者之间添加所需的字符串,然后我们在另一个字符串中插入了一个字符串.

Python的切片表示法有一个很好的答案来解释字符串切片的主题.

  • 很棒的答案,但我相信这部电影的标题拼写为"*Kung*Fu Panda" (23认同)
  • 实际上,“拼写”和“拼写”都是正确的。“拼写”是英国的拼写。“拼写”仅在美国是不可接受的,因为“ muh,'farming”。它因方言而异,“拼写”与“拼写”一样古老。例如,是“问一个问题”还是“问一个问题”?答案是两个-两者都已经有近2000年的历史了,在这两个问题中,我相信“ ax”首先出现;“问”只是比较流行。 (5认同)
  • 很棒的评论,但是我相信当使用现在时时,它是“ _spelled_” (3认同)

小智 16

我知道这是malapropos,但恕我直言的简单方法是:

def insert (source_str, insert_str, pos):
    return source_str[:pos]+insert_str+source_str[pos:]
Run Code Online (Sandbox Code Playgroud)

  • 这有什么问题 (2认同)
  • @JacobJones 使用 str 的 join 方法可能会更有效,可能会避免大型中间结果。return ''.join((source_str[:pos], insert_str, source_str[pos:])) (2认同)

Mic*_*las 8

line='Name Age Group Class Profession'
arr = line.split()
for i in range(3):
    arr.insert(2, arr[2])
print(' '.join(arr))
Run Code Online (Sandbox Code Playgroud)


Hom*_*ani 5

我的 DNA 分配也有类似的问题,我使用 bgporter 的建议来回答它。这是我创建一个新字符串的函数...

def insert_sequence(str1, str2, int):
    """ (str1, str2, int) -> str

    Return the DNA sequence obtained by inserting the 
    second DNA sequence into the first DNA sequence 
    at the given index.

    >>> insert_sequence('CCGG', 'AT', 2)
    CCATGG
    >>> insert_sequence('CCGG', 'AT', 3)
    CCGATG
    >>> insert_sequence('CCGG', 'AT', 4)
    CCGGAT
    >>> insert_sequence('CCGG', 'AT', 0)
    ATCCGG
    >>> insert_sequence('CCGGAATTGG', 'AT', 6)
    CCGGAAATTTGG

    """

    str1_split1 = str1[:int]
    str1_split2 = str1[int:]
    new_string = str1_split1 + str2 + str1_split2
    return new_string
Run Code Online (Sandbox Code Playgroud)

  • 我不建议将变量命名为“int”,因为它隐藏了内置方法。当您稍后尝试使用诸如“int("5")”之类的内容时,这可能会在较大的程序中导致问题。 (5认同)