#python
#python
Вопрос:
У меня есть список, который называется mylist
и данные имеют этот формат
[['machine/learning', 'machine'], ['learning', 'machine/learning']]
Как можно сохранить в списке только токены, внутри которых есть этот символ '/'
Ожидаемый результат
[['machine//////////learning'], ['machine//////////learning']]
Ответ №1:
Вы можете сделать это с помощью пары вложенных списков:
myList = [['machine//////////learning', 'machine'], ['learning', 'machine//////////learning']]
check = '//////////'
myList = [[y for y in x if check in y] for x in myList]
print(myList)
Результат:
[['machine//////////learning'], ['machine//////////learning']]
Ответ №2:
Я не знаю, хотите ли вы те, у которых есть один ‘/’ или набор косых черт ‘///////’ вместе.
Но вы можете выполнить цикл по списку и проверить, имеет ли каждое значение разделитель или нет, и добавить его в новый список.
Что-то вроде этого:
list = [['machine//////////learning', 'machine'], ['learning','machine//////////learning']]
newlist = []
for inner_list in list:
for l in inner_list:
if ('//////////' in l):
newlist.append(l)
print(newlist) #should be the ones with '//////////'
Это могло бы быть лучше, но в этом есть идея.
Комментарии:
1. Ответ @Steve более аккуратный.
Ответ №3:
Наиболее читаемым способом было бы использовать python filter
amp; map
functionality
def valid(s):
return '//////////' in s
def filter_valid(l):
return list(filter(valid, l))
filtered = list(map(filter_valid, my_list))
Он также может быть записан как однострочный, если хотите:
list(map(lambda l: list(filter(lambda s: key in s, l)), my_list))
Комментарии:
1. Почему вы говорите «лучший»? Что делает этот метод лучше других? Кажется, что главное, что делает ваше решение, — это занимает больше места, чем мое на кодовой странице.
2. Он оптимизирован для удобства чтения — директивы reduce map обычно используются во многих языках и очень хорошо описывают выполняемую операцию