在列表元素的中间添加/添加字符串

时间:2018-12-20 12:44:27

标签: python

说我有一个列表:

mylist = [element1, element2, element3, ...... ,elementn]

元素如下:

element1 = 'object1 = "value1" object2 = "value2" object3 = "value3"'

和所有其他元素相同,除了"value3"

略有不同

将列表中的每个元素替换为element1,您将获得列表的外观。

我有一个字符串:

to_place = 'something_to_append'

我要在to_place的末尾附加object1 = "value1",使它看起来像object1 = "value1something_to_append"

我尝试遍历每个元素,尝试找到value1(与列表中的元素相同),并使用字符串附加函数,但是我只是没有得到想要的结果

任何帮助将不胜感激。 (我会在几分钟内上传我尝试过的代码,遇到一些麻烦)

编辑:添加代码:

element = [element1, element2, element3]
s = 'something_to_append'
for u in element:
    if 'object1="value"' in u.split():
        u = u + s
print(element)

对于输出,我得到的列表与以前相同。 附言:在Windows 10上的PyCharm上使用Python 2.7

5 个答案:

答案 0 :(得分:1)

首先,字符串在python中是不可变的。因此,您永远无法在原处更改字符串-您只能复制它,对该副本进行某些操作并从中创建一个新字符串。在您的情况下,您可以定义一个函数为您完成此操作:

def insert_something(element, value, appendix):
    index_after = element.find(value) + len(value)
    return element[:index_after] + appendix + element[index_after:]

然后,遍历您的列表,对每个元素进行此操作,然后创建一个新列表(我敢肯定还有比这更优雅的方法,但这就是我想出的rn):

new_list = [insert_something(item, '"value1', to_place) for item in mylist]

编辑: 为了接近您自己的代码:您将要做的是使用enumerate,因为您将要更改列表,这将影响元素的位置。可能看起来像这样:

element = [element1, element2, element3]
s = 'something_to_append'
for idx, u in enumerate(element):
    if 'object1="value"' in u.split():
        u = u[:-1] + s + '"'
        element[idx] = u

这两种方法都能工作并返回您想要的东西,因此取决于您自己想要的更好:),尽管第一种方法是解决任何类似问题的更通用方法。

答案 1 :(得分:1)

您可以通过使用shlex.split分割字符串来概括一下这一点,以便保留值部分中的空白,将值分配给dict,更新这些值,然后重建字符串,例如:

import shlex
from collections import OrderedDict

def f(text, **kwargs):
    split = shlex.split(text)
    d = OrderedDict(zip(split[::3], split[2::3]))
    d.update((k, d[k] + v) for k, v in kwargs.items() if k in d)
    return ' '.join('{} = "{}"'.format(k, v) for k, v in d.items())

然后将其用作:

element1 = 'object1 = "value1" object2 = "value2" object3 = "value3"'
updated_string = f(element1, object1='append here')
# 'object1 = "value1append here" object2 = "value2" object3 = "value3"'

可能希望考虑引入更多的鲁棒性检查,但应该与此处的其他答案一样有效。

答案 2 :(得分:0)

用正则表达式代替可能对您有用。在这里,我将其放在一个函数中以使其更易于使用:

import re

def append_to(in_value, value_to_search, value_to_append):
    value_to_search = re.escape(value_to_search)
    return re.sub(
        '"({})"'.format(value_to_search),
        '"\\1{}"'.format(value_to_append),
        in_value,
    )

my_list = [append_to(item, 'value3', 'something_to_append') for item in my_list]

答案 3 :(得分:0)

如果所有“ value1”都相同,则可能是一个更简单的答案:

mylist = [element1, element2, element3, ...... ,elementn]
to_place = "something_to_append"
newlist = [elem.replace("value1","value1"+to_place) for elem in mylist]

答案 4 :(得分:-1)

定义一个函数f

def f(x, y):
    return x[:17] + y + x[17:]

然后做

>>> from pprint import pprint
>>> pprint(mylist)
['object1 = "value1" object2 = "value2" object3 = "value3"',
 'object1 = "value1" object2 = "value2" object3 = "value3"',
 'object1 = "value1" object2 = "value2" object3 = "value3"']
>>> to_place = 'something_to_append'
>>> new_list = [f(x, to_place) for x in mylist]
>>> pprint(new_list)
['object1 = "value1something_to_append" object2 = "value2" object3 = "value3"',
 'object1 = "value1something_to_append" object2 = "value2" object3 = "value3"',
 'object1 = "value1something_to_append" object2 = "value2" object3 = "value3"']