#python #slice
#python #разрежьте
Вопрос:
Если L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]]
Как бы разрезать L, чтобы получить все до первого пробела
['abc,'foo','bar']
Комментарии:
1. Мне нравятся эти кодировки скорости Python. Они ясно показывают, насколько быстрое кодирование на Python происходит на практике.
;)
2. Конечно, если вы всегда можете использовать три первых символа
[i[0][0:3] for i in L]
.
Ответ №1:
In [1]: L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]]
In [2]: [x[0].split(' ')[0] for x in L]
Out[2]: ['abc', 'foo', 'bar']
Ответ №2:
L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]]
print [x[0].split()[0] for x in L]
Ответ №3:
for i in range(len(L)):
s = L[i][0]
s = s.split(' ')[0]
L[i] = s
Комментарии:
1. Ewwww. Учись понимать списки, чувак!
2. @ulidtko Meh, я дал ответ так, как я бы прибегнул к этому, не означает, что он должен быть принят или поддержан
Ответ №4:
В приведенных вами случаях пробелы всегда встречаются в одном и том же положении. Если вы знаете, что это будет так, вы могли бы сделать что-то вроде:
L = [['abc 1234',2], ['foo 1',2] , ['bar 12312434',2]]
L2 = [x[0][0:3] for x in L]
print L2
Вывод:
[‘abc’, ‘foo’, ‘bar’]
Конечно, если пробелы могут встречаться в разных позициях, то вам было бы лучше использовать одно из решений, использующих str.split().
Ответ №5:
Я считаю, что понимание списка иногда сложнее для чтения, я бы предпочел разделять цикл и извлечение:
def extract(element):
"""Extracts the string until the first space of the first element of a list
>>> extract(['abc 1234',2])
'abc'
"""
return element[0].split()[0]
чтобы вы могли выполнять некоторые тесты для отдельных элементов:
extract(L[2])
'bar'
а затем примените это для понимания списка или с помощью map [применяет функцию к каждому элементу списка]:
map(extract,L)
['abc', 'foo', 'bar']