Python - 有没有办法在 for 循环中添加“as”别名?

Posted

技术标签:

【中文标题】Python - 有没有办法在 for 循环中添加“as”别名?【英文标题】:Python - Is there a way to add an "as" alias to a for loop? 【发布时间】:2018-11-29 22:43:49 【问题描述】:

注意: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

有没有办法在 for 循环中“作为”?

我的谷歌搜索没有在 *** 上找到任何关于此的问题,但如果我是第一个真正提出问题的人,我会感到惊讶。也许我没有使用正确的关键字进行搜索。

我已经阅读了this w3schools entry on 'as',但它没有说明在 for 循环中使用的任何内容。如果不在 w3schools 上,我猜这不是 Python 能做的事情,但我还是想检查 ***。

【问题讨论】:

不,没有。只需使用np.array,这是任何人都会这样做的正常方式。如果您真的想要,请将其包装在 map(np.array, ...) 所以 map(np.array, powerset(value_list)) 没有其他人发表评论或回答,所以您能否将其重新发布为答案,以便我将其标记为已回答? 【参考方案1】:

为自己回答:除了通过评论之外,没有人提供“答案”,因此重新发布评论的本质以标记 OP“已回答”。

【讨论】:

以上是关于Python - 有没有办法在 for 循环中添加“as”别名?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python FOR 循环中获取循环计数

在 Python 中使用 for 循环在日期列中添加前导零

添加到列表时有没有办法避免循环?

如何在python里面for循环中放了一个定时函数,当定时函数运行时跳过本次循环,执行那个循环

有没有办法在 Java for-each 循环中访问迭代计数器?

如何在 Python 中的一行中编写条件 for 循环?