Как я могу написать приведенный ниже код python в виде единого списка, который также включает вызов функции? - PullRequest
0 голосов
/ 09 мая 2020
states = { 1:['Alabama@ ', 'Georgia!', 'Geor%gia%%', 'georgia', 'FlOrIda', 'southcarolina##', 'West virginia?']}

def remove_punctuations(value):
    return re.sub('[#!?@%]','',value) # remove these punctuations 

for_strings = [str.title, remove_punctuations, str.strip] # perform these  actions on strings 

def clean_strigs(strings,options):
    result = []
    for val in strings:
        #print(val)
        for function in options:
            val = function(val)
        result.append(val)
    return result

filter_dictonary(states[1],for_strings)

output = ['Alabama',
 'Georgia',
 'GeorGia',
 'Georgia',
 'Florida',
 'Southcarolina',
 'West Virginia']

Я пытаюсь написать функцию clean_string с пониманием, а также пытаюсь вызвать внутри нее for_list, но не могу этого сделать. Я попробовал приведенный ниже код.

def filter_column(strings,for_strings):
    result =  [val for value in strings for function  in for_strings for val in function(val) ]
    return result

Может помочь мне написать это?

резюме: просто напишите вышеуказанные clean_strigs в едином понимании списка

Ответы [ 2 ]

2 голосов
/ 09 мая 2020

Вы можете использовать следующее решение. Он должен работать.

result = [reduce(lambda a, func: func(a), [value] + for_strings) for value in states[1] ]

Проблема с вложенным l oop в понимание списка состоит в том, что результат предыдущей функции не будет передан следующей функции. Вот где на помощь приходит сокращение.

Надеюсь, это поможет.

1 голос
/ 09 мая 2020

Понимание не подходит для поставленной задачи. Это решает проблему:

def filter_dictonary(strings,for_strings):
    for f in for_strings:
        strings = map(f,strings)
    return list(strings)

Если вы исправите эту ошибку спецификаций c в своей функции, выполнив следующие действия:

result =  [val for value in strings 
           for function in for_strings 
           for val in function(value) ]  # function(val) creates the error

, это не сработает, потому что вы затем запустите одиночные символы и выполните не получить ту комбинацию функций, которую вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...