#python #string #list #slice
#python #строка #Список #нарезать
Вопрос:
Есть ли Pythonic способ нарезать все строки в списке?
Предположим, у меня есть список строк:
list = ['foo', 'bar', 'baz']
И я хочу только последние 2 символа из каждой строки:
list2 = ['oo', 'ar', 'az']
Как я могу это получить?
Я знаю, что могу перебирать список и извлекать list[i][-2:]
из каждого, но это не кажется очень питоническим.
В менее общем случае мой код:
def parseIt(filename):
with open(filename) as f:
lines = f.readlines()
result = [i.split(',') for i in lines[]]
… за исключением того, что я хочу разделить только lines[i][20:]
из каждой строки (не всю строку).
Комментарии:
1. Что не так с
[word[1:] for word in lst]
? Это довольно просто. Кроме того, ваш код имеет дело с файлом, в котором каждая строка разделена запятой?2. @idjaw: Да, именно так; спасибо. Точнее, это отвечает на первую часть моего вопроса и подсказывает мне, как решить вторую часть, которая, я думаю, есть
result = [i[20:].split(',') for i in lines]
. Сделайте это ответом, и я поддержу его.3. Но какой конечный результат вы ищете?
[i[20:].split(',') for i in lines]
кажется немного странным. Как выглядит каждая строка изlines
? И что именно вы хотите получить в качестве конечного результата?4. @idjaw
[i[20:].split(',') for i in lines]
может показаться странным, но это дает именно то, что я хотел. Это файл журнала, в котором первые 20 байтов каждой строки являются заголовком / меткой времени, а затем остальная часть каждой строки разделяется запятыми.5. Нет проблем. Я опубликовал решение для вас.
Ответ №1:
Вы упомянули, что вы можете сделать list[i][-2:]
для преобразования списка в соответствии с вашей спецификацией, но на самом деле вы ищете:
[word[1:] for word in lst]
Кроме того, для предоставленного вами примера кода, в котором вы хотите вырезать 20 символов с начала, решение будет таким же:
result = [i[20:].split(',') for i in lines]