Как получить список функций с помощью оператора if else в python для создания переменной? - PullRequest
0 голосов
/ 14 октября 2018

Как мне заставить эти списки проходить через мою функцию (это правильная терминология)?

Списки:

temp_a = [1, 2, 3, 4, 5]
temp_b = [2, 2, 3, 4, 1]
temp_c = [1, 0, 2, 2, 1]

Функция (я только что вставил * здесь,но я хочу определить список в функции):

def temp_class(temperature):
temp_class = []
for i in *:
    if i < 3:
        temp_class.append(0)
    else:
        temp_class.append(1)

Пример, который не работает:

temp_value = [tempclass(t) for t in temp_a] #initial function is wrong
print(temp_value)

Что здесь не так?Я пытался посмотреть на переполнение стека и в других местах, но ничего не могу найти.Возможно, я использую неправильную терминологию.

Что я использую вместо *?

Ответы [ 4 ]

0 голосов
/ 14 октября 2018

Похоже, вы пытаетесь сопоставить каждый из своих временных списков с их эквивалентными списками классов, и в этом случае было бы неплохо передать сам временный список в качестве аргумента функции:

def temp_class(temp_list):
    temp_class = []
    for i in temp_list:
        if i < 3:
            temp_class.append(0)
        else:
            temp_class.append(1)
    return temp_class

Если вы хотите иметь функцию, которая выполняет то же самое более чистым способом (аналогично подходу Маора), вы можете сделать:

def temp_class(temp_list):
    return list(map(lambda t: 0 if t < 3 else 1, temp_list))

Таким образом, вы сможете получитьотображение классов temp_a, например, таким образом:

print(temp_a)
>>>[1, 2, 3, 4, 5]

temp_a_class = temp_class(temp_a)

print(temp_a_class)
>>>[0, 0, 1, 1, 1]

и отображение классов для temp_b следующим образом:

print(temp_b)
>>>[2, 2, 3, 4, 1]

temp_b_class = temp_class(temp_b)

print(temp_b_class)
>>>[0, 0, 1, 1, 0]

и т. д.

0 голосов
/ 14 октября 2018

Может быть, это будет более читабельным (foo и bar возвращают точно такой же результат):

a = [1, 2, 3, 4, 5]

# With map+lambda
def foo(array):
    return map(lambda x: 0 if x < 3 else 1, array)

# With list comprehension
def bar(array):
    return [0 if x < 3 else 1 for x in array]

print(foo(a))  # [0, 0, 1, 1, 1]
print(bar(a))  # [0, 0, 1, 1, 1]
0 голосов
/ 14 октября 2018

Мне кажется, я понял, что вы хотите сделать, и вот как вы это делаете:

all list = [temp_a,temp_b,temp_c]
temp_list = []
def temp_class(temperature):
    for i in temperature:
        if i < 3:
            temp_class.append(0)
        else:
            temp_class.append(1)

, а затем просто вызываете свою функцию следующим образом:

[tempclass(t) for t in all_list]

print temp_list

0 голосов
/ 14 октября 2018

Полагаю, вы ищете аргументы звездочек:

def foo(*args, **kwargs):
    print(args)
    print(kwargs)

test:

foo([1,2,3], bar1="foobar", bar2="foobar2" )

([1, 2, 3],)
{'bar1': 'foobar', 'bar2': 'foobar2'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...