Замена элемента на элемент - 1 в python - PullRequest
0 голосов
/ 18 октября 2019

Привет, у меня есть вопрос: у меня есть список

l = [ 'a', 'b', '"', 'c', 'd', '"', 'e'] 

, теперь я хочу заменить все символы "" на предыдущий. Это означает:

Output =[ 'a', 'b', 'b', 'c', 'd', 'd', 'e']

БЕТОН:

    Straßen_list = ['Katharinenstraße', 'iakobstraße', 'Katharinenstraße', 
'ilhelmsplatzKatharinen-', 'Hauptstätterstraße', '"', 'Wilhelmsplatzalter', 
'"', 'Schlosscrstraße', 'Houptstcktterstraße1^Uhlandapotheke\n', ';"', 
'!Torstraße[Einblick', 'HauptstätterstraßeNr50-36', '"', '"', 
"Hauptstätterstraße;Hs.i'ir.24", 'Brückenstraße', 'HauptstätterstraßeÖ', 
'Holzstraße', 'Rosenstraße', 'Holzstraße2', 'tilhlcurr', 
'HolzstraßeDanziger', 'EsslingerstraßeDanz.Freiheit', 'Danz.Freiheit', 
'Esslinger', 'RosenstraßeEsslinger8tr»', 'Esslinger', 'Esslinget', 
'bagnerstraße', 'Esslinger', 'Leonhardsplatz!Blickgegen', '*Holz-', '"', '"', 
'"', '<hardskirche\n', '', '']

, и мне нужно заменить все "" "на этот элемент раньше.

Может кто-нибудь помочь, пожалуйста! Я схожу с ума ...

Ответы [ 5 ]

2 голосов
/ 18 октября 2019

Простой для понимания подход:

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))

Вы по-прежнему не указали, что делать с первым слагаемым, если оно '' ', если оно принимает значение последнего слагаемогоиз списка?:)

1 голос
/ 18 октября 2019

Вы можете сделать это с пониманием списка:

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']
0 голосов
/ 18 октября 2019
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)
0 голосов
/ 18 октября 2019

Для очень явного метода,

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)
0 голосов
/ 18 октября 2019

Это один подход, использующий 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...