Нарезать все строки в списке?

#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]