Створити новий список підрядків зі списку рядків

Чи є простий шлях у python створення списку підрядків зі списку рядків?

Приклад:

original list: ['abcd','efgh','ijkl','mnop']

list of substrings: ['bc','fg','jk','no']

Я знаю, що це може бути досягнуто за допомогою простого циклу, але чи є простіший шлях у python (Може бути, один лайнер)?

3
може бути багато підрядів. ви показали тільки з індексу [1-2].
додано Автор rocker_raj, джерело

8 Відповіді

Використовуйте нарізки і розуміння списку :

>>> lis = ['abcd','efgh','ijkl','mnop']
>>> [ x[1:3] for x in lis]
['bc', 'fg', 'jk', 'no']

Нарізка:

>>> s = 'abcd'
>>> s[1:3]      #return sub-string from 1 to 2th index (3 in not inclusive)
'bc'
3
додано
Чорт, просто трохи швидше мене! :)
додано Автор Henrik Andersson, джерело
спасибі, це працює :) (Чомусь я не можу прийняти вашу відповідь до 11 хвилин)
додано Автор ala, джерело

Використовуйте нарізки і розуміння списку :

>>> lis = ['abcd','efgh','ijkl','mnop']
>>> [ x[1:3] for x in lis]
['bc', 'fg', 'jk', 'no']

Нарізка:

>>> s = 'abcd'
>>> s[1:3]      #return sub-string from 1 to 2th index (3 in not inclusive)
'bc'
3
додано
Чорт, просто трохи швидше мене! :)
додано Автор Henrik Andersson, джерело
спасибі, це працює :) (Чомусь я не можу прийняти вашу відповідь до 11 хвилин)
додано Автор ala, джерело

Ви можете скористатися розпізнаванням списків однієї вкладиші.

За допомогою нарізки і відносних позицій можна обрізати перший і останній символи в кожному елементі.

>>> l = ['abcd','efgh','ijkl','mnop']
>>> [x[1:-1] for x in l]
['bc', 'fg', 'jk', 'no']

Якщо ви робите це багато разів, розгляньте можливість використання функції:

def trim(string, trim_left=1, trim_right=1):
    return string[trim_left:-trim_right]

def trim_list(lst, trim_left=1, trim_right=1):
    return [trim(x, trim_left, trim_right) for x in lst] 

>>> trim_list(['abcd','efgh','ijkl','mnop'])
['bc', 'fg', 'jk', 'no']
1
додано

Ви можете скористатися розпізнаванням списків однієї вкладиші.

За допомогою нарізки і відносних позицій можна обрізати перший і останній символи в кожному елементі.

>>> l = ['abcd','efgh','ijkl','mnop']
>>> [x[1:-1] for x in l]
['bc', 'fg', 'jk', 'no']

Якщо ви робите це багато разів, розгляньте можливість використання функції:

def trim(string, trim_left=1, trim_right=1):
    return string[trim_left:-trim_right]

def trim_list(lst, trim_left=1, trim_right=1):
    return [trim(x, trim_left, trim_right) for x in lst] 

>>> trim_list(['abcd','efgh','ijkl','mnop'])
['bc', 'fg', 'jk', 'no']
1
додано

З поєднанням нарізки і списків розуміння ви можете зробити це так

listy = ['abcd','efgh','ijkl','mnop']
[item[1:3] for item in listy]
>> ['bc', 'fg', 'jk', 'no']
1
додано
Бити вас до нього. : П.
додано Автор Ashwini Chaudhary, джерело

З поєднанням нарізки і списків розуміння ви можете зробити це так

listy = ['abcd','efgh','ijkl','mnop']
[item[1:3] for item in listy]
>> ['bc', 'fg', 'jk', 'no']
1
додано
Бити вас до нього. : П.
додано Автор Ashwini Chaudhary, джерело

Якщо ви хочете зробити це в одному рядку, спробуйте це:

>>> map(lambda s: s[1:-1], ['abcd','efgh','ijkl','mnop'])
0
додано

Якщо ви хочете зробити це в одному рядку, спробуйте це:

>>> map(lambda s: s[1:-1], ['abcd','efgh','ijkl','mnop'])
0
додано
ІТ КПІ - Python
ІТ КПІ - Python
625 учасників

Канал обговорень про всякі штуки зі світу пайтону. Прохання: 0. мати повагу одне до одного; 1. не матюкатися в сторону людей; 2. не захламляти тред повідомленнями по одному слову;