2016-09-01 3 views
2

Просто действительно быстрый вопрос, который я не могу понять, за жизнь мне, хотя это кажется просто ...Удаление символов из индексов в нескольких списках

Как удалить последние 2 символа каждого 4-го индекса список, в списке? Таким образом, в менее запутанных условиях:

f = ['yes', 'no', 'tot', 'foop\n'] 
p = ['ick', 'throw', 'tamp', 'lap\n'] 

L = [] 

L.append(f) 
L.append(p) 

Так что теперь L является:

L = [['yes', 'no', 'tot', 'foop\n'], ['ick', 'throw', 'tamp', 'lap\n']] 

Как бы я идти о получении писать цикл, который бы избавиться от \ п в конце каждого 4-го индекса, в обоих списках (которые также могут быть расширены для более чем двух списков, перечисленных выше в списке)?

Я просто хочу, чтобы он возвращал L, без этих \ n в конце этих последних индексов.

+0

это зафиксировано, что из каждого списка будет иметь 4 элементы? – ameyCU

+1

'L.append ([x.strip() для x в f]) ' – ozgur

ответ

1
f = ['yes', 'no', 'tot', 'foop\n'] 
p = ['ick', 'throw', 'tamp', 'lap\n'] 

L = [] 

L.append(f) 
L.append(p) 

for i in range(len(L)): 
    L[i][3] = L[i][3].rstrip('\n') # Use rstrip to strip the specified character(s) from the right side of the string. 
print L 

>>[['yes', 'no', 'tot', 'foop'], ['ick', 'throw', 'tamp', 'lap']] 
+1

Эти ответы были фантастическими, но этот был самым быстрым и самым простым. Спасибо! – Destroxia

1
f = ['yes', 'no', 'tot', 'foop\n'] 
p = ['ick', 'throw', 'tamp', 'lap\n'] 

L = [] 

L.append(f) 
L.append(p) 
#iterate through every element in the list and 
#apply simple slicing 
for x in L: 
    x[-1] = x[-1][:-1] 

Выход -

[['yes', 'no', 'tot', 'foop'], ['ick', 'throw', 'tamp', 'lap']] 
0

Как уже упоминалось в комментариях:

f = ['yes', 'no', 'tot', 'foop\n'] 
p = ['ick', 'throw', 'tamp', 'lap\n'] 

L = [] 

L.append([item.strip() for item in f]) 
L.append([item.strip() for item in p]) 

Или в одном шаге:

f = ['yes', 'no', 'tot', 'foop\n'] 
p = ['ick', 'throw', 'tamp', 'lap\n'] 

L = [] 

for lst in [f, p]: 
    L.append([item.strip() for item in lst]) 

или менее:

f = ['yes', 'no', 'tot', 'foop\n'] 
p = ['ick', 'throw', 'tamp', 'lap\n'] 

L = [[item.strip() for item in l] for l in [f, p]] 

И последнее, но не менее важное: в ответе на ваш вопрос; если вам нужно специально полосы определенных индексов из списка списков:

L = [['yes', 'no', 'tot', 'foop\n'], ['ick', 'throw', 'tamp', 'lap\n']] 
for lst in L: 
    lst[3] = lst[3].strip() 

По умолчанию strip() полосы из пробельных символов, см this.

+0

Ах, нисходящий. помочь объяснить? –

0
f = ['yes', 'no', 'tot', 'foop\n'] 
p = ['ick', 'throw', 'tamp', 'lap\n'] 
L = [] 
L.append(f) 
L.append(p) 

for i in L: 
    i[3] = i[3].rstrip('\n') 

>>> [['yes', 'no', 'tot', 'foop'], ['ick', 'throw', 'tamp', 'lap']] 
+1

Это даст такой результат. '[['yes', 'no', 'tot', ['yes', 'no', 'tot']], ['ick', 'throw', 'tamp', ['ick', 'throw ',' tamp ']]] ' –

+0

Да, я просто понял. У меня есть пример исправленного. Благодарю. – user6037143

+1

Хотя этот код может помочь решить проблему, он не объясняет _why_ и/или _how_, он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшит его долгосрочную образовательную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, включая ограничения и допущения. –

0

Для получения каждого 4-го элемента с использованием списка этой части: i[3::4]

Для удаления двух последних символов из пункта: x[:-1]

Выход сценария:

for i in L: 
    i[3::4] = [ x[:-1] for x in i[3::4]] 

Результат:

[[ 'да', 'нет', 'карапуз', 'foop'], [ 'Ик', 'бросить', 'набивают', 'круг']]

+0

Элегантное решение :) –

+0

В чем смысл '[3 :: 4]'? – vaultah

+0

'[3 :: 4]' возвращает каждый 4-й элемент из списка. Для списка '['yes', 'no', 'tot', 'foop \ n', 'ick', 'throw', 'tamp', 'lap \ n']' он вернет '['foop \ n ',' lap \ n '] ' – Serbin

1

Если вы хотите удалить новые линии и белое пространство только с 4-го индекса с пониманием списка:

>>> f = ['yes', 'no', 'tot', 'foop\n'] 
>>> p = ['ick', 'throw', 'tamp', 'lap\n'] 
>>> [x[0:3]+[x[3].rstrip()] for x in [f]+[p]] 
[['yes', 'no', 'tot', 'foop'], ['ick', 'throw', 'tamp', 'lap']] 

Или map эквивалент:

>>> list(map(lambda x: x[0:3]+[x[3].rstrip()],[f]+[p])) 
[['yes', 'no', 'tot', 'foop'], ['ick', 'throw', 'tamp', 'lap']] 
Смежные вопросы