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"]
这样做有一种短暂优雅的方式吗?
答案 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])
可能有更好的方法可以做到这一点,但这个方法很好,很容易理解。