如何加入满足特定条件的列表元素?

时间:2017-06-02 11:32:24

标签: python string list

x_list = ["I", "live", "in", "New", "-", "York", "City", ".", "I", "am" "from", "New", "-", "Delhi"]

这是我的清单。我想要的是加入连字符“ - ”之前和之后的单词。这样我的名单就变成了。

x_list = ["I", "live", "in", "New-York", "City", ".", "I", "am", "from", "New-Delhi"]

这样做有一种短暂优雅的方式吗?

3 个答案:

答案 0 :(得分:4)

有点奇怪但优雅的方式:

lst = ["I", "live", "in", "New", "-", "York", "City"]

pattern = "<erpvinpervin>"
s = pattern.join(lst)
s = s.replace("{0}-{0}".format(pattern), "-")
lst = s.split(pattern)

作为pattern,您可以使用列表中无法满足的任意字符串。

答案 1 :(得分:2)

你可以enumerate d for - 循环:

lst = ["I", "live", "in", "New", "-", "York", "City"]
for index, item in enumerate(lst):
    if item == '-':
        lst[index-1:index+2] = [''.join(lst[index-1:index+2])]

print(lst)  # ['I', 'live', 'in', 'New-York', 'City']

或者如果您正在处理短列表并且很少'-'(如您的示例中所示),您也可以使用while循环。但是,这具有二次运行时行为,因此如果您关心性能,请不要将此用于具有大量'-'的大型列表:

lst = ["I", "live", "in", "New", "-", "York", "City"]
while '-' in lst:
    pos = lst.index('-')
    lst[pos-1:pos+2] = [''.join(lst[pos-1:pos+2])]

print(lst)  # ['I', 'live', 'in', 'New-York', 'City']

答案 2 :(得分:0)

for index, item in enumerate(lista):
    if item == '-':  # Checks if current item is your separator
        lista[index-1] = ''.join(lista[index-1:index+2])  # Joins the 3 indexes (new-york or whatever.)
        lista.remove(lista[index]) #  Removes the "garbage" that remained from the actual list
        lista.remove(lista[index])

可能有更好的方法可以做到这一点,但这个方法很好,很容易理解。