Python - есть ли способ добавить псевдоним "as" в цикл for?

Замечания: python --version доходность Python 3.6.4 :: Anaconda, Inc.

Я работаю с некоторыми itertools код, который, кажется, намеревается выпускать кортежи, но я хочу перебрать каждый результат как numpy.array, Вариант использования: у меня есть набор данных с ~10 функциями, и мне любопытно, чтобы все комбинации наборов функций для подбора кластеров были переборы.

Итак, я попробовал это:

from itertools import chain, combinations
import numpy as np
def the_python_way(value_list):
    # creates a generator on an iterator; not sure which
    def powerset(iterable):
        # Note: Seems to forcefully make the results tuples. Casting the tuple 
        # produced by combinations(...) to something else seems to alter the 
        # production order a bit, but when I check the type produced by the 
        # final chain.from_iterable(...) it still says "tuple". Weird.
        return chain.from_iterable(
                np.array(combinations(iterable, len_n))
                for len_n in range(len(iterable)+1))

    for item in powerset(value_list):
        print("type: ", type(item), ", item: ", np.array(item))

the_python_way([1,2,3])

Выход:

type:  <class 'tuple'> , item:  ()
type:  <class 'tuple'> , item:  (1,)
type:  <class 'tuple'> , item:  (2,)
type:  <class 'tuple'> , item:  (3,)
type:  <class 'tuple'> , item:  (1, 2)
type:  <class 'tuple'> , item:  (1, 3)
type:  <class 'tuple'> , item:  (2, 3)
type:  <class 'tuple'> , item:  (1, 2, 3)

Да. Я мог бы просто переопределить значение цикла:

# attempt 1: just cast to np.array(item)
for item in powerset(value_list):
    item = np.array(item)
    # carry on

Но это кажется слишком C. Вот что я хотел бы сделать:

# attempt 2: syntax error
for np.array(value) as item in powerset(value_list):
    # carry on

Не так предпочтительно, но я надеялся, что это сработает. Нету:

# attempt 5: syntax error
for np.array(value) in powerset(value_list) as item:
    # carry on

Есть ли способ "как" в цикле?

Мои поиски в Google не нашли никаких вопросов по этому поводу в stackru, но я был бы удивлен, если бы я был первым, кто на самом деле задал этот вопрос. Возможно я не искал с правильными ключевыми словами.

Я читал эту запись в w3schools "как", но она ничего не говорит об использовании в цикле for. Если это не в w3schools, я думаю, что это не то, что Python может сделать, но я все равно хотел проверить stackru.

2 ответа

нет

Отвечая за себя: Никто не предлагал "ответ", кроме как через комментарий, поэтому отправьте сущность комментария, чтобы пометить ОП "ответ".

Это точная цель оператора моржа (:=), но проблема в вашем случае:= доступен только с python 3.8 и далее. Если вы обновите версию Python до 3.8+, вы можете сделать что-то вроде этого

      for (np.array(value) := item) in powerset(value_list):
    # carry on
Другие вопросы по тегам