用 Python 中的值替换列表中的序列
Replace sequence in list with a value in Python
我想用另一个元素(元素)替换列表中示例中的两个特定的一个接一个的元素。
例如 - 将 ["+", "="]
替换为 ["+="]
:
输入:
[3, "blah", "+", "foo", "=", "+", "="]
输出:
[3, "blah", "+", "foo", "=", "+="]
以下虽然非常对于长列表来说效率很低,但它会起作用:
loop=[3, "blah", "+", "foo", "=", "+", "="]
out=[]
prevdone=False
for i in range(len(loop)):
if loop[i]=="+" and loop[i+1]=="=":
out.append("+=")
prevdone=True
elif not(prevdone):
out.append(loop[i])
else:
prevdone=False
print(out)
它遍历列表并检查当前和后续字符是否满足条件。如果他们这样做,它将添加 +=
并跳过下一项。
我考虑过使用 "".join(list)
和 string.split("")
但这不会(我不认为)适用于多字符元素。
对于通用函数,可以这样修改:
def loopReplace(loopList, item1, item2):
out=[]
prevdone=False
for i in range(len(loopList)):
if loopList[i]==item1 and loopList[i+1]==item2:
out.append(str(item1)+str(item2))
prevdone=True
elif not(prevdone):
out.append(loopList[i])
else:
prevdone=False
return out
list = [3, "blah", "+", "foo", "=", "+", "="]
for index, item in enumerate(list):
if item =='+' and list[index +1]=='=':
list[index] = "+="
del list[index + 1]
print(list)
好的,当我看到这些答案时,我想我会 post 我的解决方案。我做了一些包装函数。
def replace(sequence, replacement, lst, expand=False):
out = list(lst)
for i, e in enumerate(lst):
if e == sequence[0]:
i1 = i
f = 1
for e1, e2 in zip(sequence, lst[i:]):
if e1 != e2:
f = 0
break
i1 += 1
if f == 1:
del out[i:i1]
if expand:
for x in list(replacement):
out.insert(i, x)
else:
out.insert(i, replacement)
return out
我想用另一个元素(元素)替换列表中示例中的两个特定的一个接一个的元素。
例如 - 将 ["+", "="]
替换为 ["+="]
:
输入:
[3, "blah", "+", "foo", "=", "+", "="]
输出:
[3, "blah", "+", "foo", "=", "+="]
以下虽然非常对于长列表来说效率很低,但它会起作用:
loop=[3, "blah", "+", "foo", "=", "+", "="]
out=[]
prevdone=False
for i in range(len(loop)):
if loop[i]=="+" and loop[i+1]=="=":
out.append("+=")
prevdone=True
elif not(prevdone):
out.append(loop[i])
else:
prevdone=False
print(out)
它遍历列表并检查当前和后续字符是否满足条件。如果他们这样做,它将添加 +=
并跳过下一项。
我考虑过使用 "".join(list)
和 string.split("")
但这不会(我不认为)适用于多字符元素。
对于通用函数,可以这样修改:
def loopReplace(loopList, item1, item2):
out=[]
prevdone=False
for i in range(len(loopList)):
if loopList[i]==item1 and loopList[i+1]==item2:
out.append(str(item1)+str(item2))
prevdone=True
elif not(prevdone):
out.append(loopList[i])
else:
prevdone=False
return out
list = [3, "blah", "+", "foo", "=", "+", "="]
for index, item in enumerate(list):
if item =='+' and list[index +1]=='=':
list[index] = "+="
del list[index + 1]
print(list)
好的,当我看到这些答案时,我想我会 post 我的解决方案。我做了一些包装函数。
def replace(sequence, replacement, lst, expand=False):
out = list(lst)
for i, e in enumerate(lst):
if e == sequence[0]:
i1 = i
f = 1
for e1, e2 in zip(sequence, lst[i:]):
if e1 != e2:
f = 0
break
i1 += 1
if f == 1:
del out[i:i1]
if expand:
for x in list(replacement):
out.insert(i, x)
else:
out.insert(i, replacement)
return out