5 回答

TA貢獻1860條經驗 獲得超9個贊
易于理解的方法:
l = [ 'a', 'b', '"', 'c', 'd', '"', 'e']
def replacer(l):
for i in range(1,len(l)):
if l[i] == '"':
l[i] = l[i-1]
return(l)
print(replacer(l))
由于您沒有指定如何處理第一個術語,所以我忽略它:)
編輯:仍然不太清楚你想連續使用 '"' 做什么,第二個 '"' 應該替換為 -2 術語,還是保持這樣?如果你想讓它保持這種狀態,你應該試試這個:
l = [ 'a', 'b', '"', 'c', 'd', '"', 'e']
def replacer(l):
out = [l[0]]
for i in range(1,len(l)):
if l[i] == '"':
out.append(l[i-1])
else:
out.append(l[i])
return(out)
print(replacer(l))
您仍然沒有指定如何處理第一個術語,如果它是'"',它應該采用列表最后一個術語的值嗎?:)

TA貢獻1876條經驗 獲得超7個贊
您可以通過列表理解來做到這一點:
l = [ 'a', 'b', '"', 'c', 'd', '"', 'e']
out = [elt if elt != '"' else l[i-1] for i, elt in enumerate(l)]
print(out)
# ['a', 'b', 'b', 'c', 'd', 'd', 'e']
但是,如果初始列表可以在一行中包含多個空項,則這不會按預期工作。在這種情況下,您可以這樣做:
data = [ 'a', 'b', '"', '"', 'c', 'd', '"', 'e'] # 2 " in a row
out = []
for elt in data:
if elt != '"':
last = elt
out.append(last)
print(out)
# ['a', 'b', 'b', 'b', 'c', 'd', 'd', 'e']

TA貢獻1815條經驗 獲得超6個贊
這是一種使用enumerate.
前任:
l = [ 'a', 'b', '', 'c', 'd', '', 'e']
print([val if val.strip() else l[idx-1] for idx, val in enumerate(l)])
# --> ['a', 'b', 'b', 'c', 'd', 'd', 'e']

TA貢獻1813條經驗 獲得超2個贊
對于一個非常明確的方法,
l = [ 'a', 'b', '"', 'c', 'd', '"', 'e']
new_list = []
last = 'LAST' # In the event that the first string is '"'
for item in l:
if item == '"':
new_list.append(last)
else:
new_list.append(item)
last = item
print(new_list)

TA貢獻1830條經驗 獲得超3個贊
characters = ["a", "b", "\"", "c", "d", "\"", "e"]
alpha_iter = iter(char for char in characters if char.isalpha())
characters_extended = []
previous_alpha = ""
for char in characters:
if char.isalpha():
characters_extended.append(char)
previous_alpha = next(alpha_iter)
else:
characters_extended.append(previous_alpha)
print(characters_extended)
添加回答
舉報