Нарезка строкового объекта в массиве - PullRequest
0 голосов
/ 14 января 2020
def shorten_string(arr):
    newchar = []
    for char in arr:
        #for z in char:
            if char[-2:] == "Ja":
                newchar = char[0:-2]
            elif char[-4:] == "Nein":
                newchar = char[0:-4]
            newchar.append(char)
    return newchar

Чтение массива со строками типа:

arr = ["KK_abc_Nein","KK_abc_Ja","KK_def_Nein","KK_def_Ja"]

Я хотел бы выяснить, соответствуют ли последние буквы строковому объекту, а затем добавить строку без _Nein или _Ja в массив и вернуть его.

'str' object has no attribute 'append'

большую часть времени я получаю эту ошибку.

Ответы [ 3 ]

0 голосов
/ 14 января 2020

Для этого примера вы можете просто сделать:

arr = [x.replace('_Nein','').replace('_Ja','') for x in arr]
0 голосов
/ 14 января 2020

как насчет:

arr = ["KK_abc_Nein","KK_abc_Ja","KK_def_Nein","KK_def_Ja"]
b = [ s.replace('_Nein', '').replace('_Ja', '') for s in arr]
print(b)

будет выводить

['KK_abc', 'KK_abc', 'KK_def', 'KK_def']
0 голосов
/ 14 января 2020

Обычно вы перезаписываете список newchar, назначая ему строку.

Вместо этого вы можете использовать split(), pop() и join() для выполнения работы:

def shorten_string(arr):
known_ends = ["Ja", "Nein"]
newchar = []
for char in arr:
    char = char.split("_")
    end = char.pop()
    if end in known_ends:
        newchar.append("_".join(char))
return newchar

Это будет работать с любым количеством «слов»

>>> arr = ["KK_abc_Nein","KK_abc_Ja","KK_def_Nein","KK_def_Ja"]
>>> shorten_string(arr)
>>> ['KK_abc', 'KK_abc', 'KK_def', 'KK_def']

РЕДАКТИРОВАТЬ: добавлен список known_ends, чтобы легко обновлять список концов, которые вы хотите обработать вместо перегрузки оператора if

...