Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以python的方式看待for循环中的for循环_Python_For Loop_Combinations_Itertools - Fatal编程技术网

如何以python的方式看待for循环中的for循环

如何以python的方式看待for循环中的for循环,python,for-loop,combinations,itertools,Python,For Loop,Combinations,Itertools,我从itertools.product中找到了这段代码,以查找列表的唯一组合 args = [["a","b"], ["a", "c", "d"], ["h"]] pools = [tuple(pool) for pool in args] for pool in pools: result = [x + [y] for x in result for y in pool] 其中: print(result) [['a', 'a', 'h'], ['a', 'c', 'h'], ['

我从itertools.product中找到了这段代码,以查找列表的唯一组合

args = [["a","b"], ["a", "c", "d"], ["h"]]
pools = [tuple(pool) for pool in args]

for pool in pools:
    result = [x + [y] for x in result for y in pool]
其中:

print(result)
[['a', 'a', 'h'], ['a', 'c', 'h'], ['a', 'd', 'h'], ['b', 'a', 'h'], ['b', 'c', 'h'], ['b', 'd', 'h']]
现在,我想知道是否有一种方法可以用for循环以“正常”的方式来编写它?我设法用if语句将其重写为一个for循环,如下所示:

[s for s in p if s != 'a']
等于:

s = []
for x in p:
    if x != 1:
        s.append(x)

但我还没有在for循环中为for循环做到这一点。。。我对这个很陌生,所以我猜一定有办法做到这一点,但我不知道怎么做。有人知道如何做到这一点吗?

我认为你可以继续这一趋势,例如:

[(x,y)表示[0,1,2,3,4,5]中的x,如果x<3表示[0,1,2,3,4,5]中的y,如果x+y==4,则表示2
相当于(通过为和如果取每个
,并将它们放在新行上):

s=[]
对于[0,1,2,3,4,5]中的x:
如果x<3:
对于[0,1,2,3,4,5]中的y:
如果2
对于问题中的示例,列表理解中的
结果
引用了
结果
的旧值,因此在创建新的
结果
时需要保留该值:

result=[]]
对于池中的池:
旧结果=结果#记住旧结果
结果=[]#使用此变量生成新结果
对于旧结果中的x:
对于池中的y:
结果。追加(x+[y])
或者,您可以在不同的变量中构建新的
结果
,并将
结果
设置为:

result=[]]
对于池中的池:
new_result=[]。#使用此变量生成新结果
对于结果中的x:
对于池中的y:
新结果追加(x+[y])
结果=新结果#更新当前结果

还有一个例子。

我认为你可以继续这种趋势,例如:

[(x,y)表示[0,1,2,3,4,5]中的x,如果x<3表示[0,1,2,3,4,5]中的y,如果x+y==4,则表示2
相当于(通过为
如果取每个
,并将它们放在新行上):

s=[]
对于[0,1,2,3,4,5]中的x:
如果x<3:
对于[0,1,2,3,4,5]中的y:
如果2
对于问题中的示例,列表理解中的
结果
引用了
结果
的旧值,因此在创建新的
结果
时需要保留该值:

result=[]]
对于池中的池:
旧结果=结果#记住旧结果
结果=[]#使用此变量生成新结果
对于旧结果中的x:
对于池中的y:
结果。追加(x+[y])
或者,您可以在不同的变量中构建新的
结果
,并将
结果
设置为:

result=[]]
对于池中的池:
new_result=[]。#使用此变量生成新结果
对于结果中的x:
对于池中的y:
新结果追加(x+[y])
结果=新结果#更新当前结果

还有另一个例子。

您可以将一个for循环嵌套在另一个for循环中,就像您上一个例子中的
if
位于
for
的内部一样。实际上,您也必须颠倒它们的顺序,因此最后一个成为
for
的第一个
,等等。谢谢!那么对于这个[x+[y]对于x在池中对于y的结果]来说,这是如何工作的呢。我不太明白如何以正确的方式附加x+[y]。。你可以将一个for循环嵌套在另一个for循环中,就像在上一个示例中,
如果
for
的内部。实际上你也必须颠倒它们的顺序,所以最后一个成为
for
的第一个
,等等。谢谢!那么对于这个[x+[y]对于x在池中对于y的结果]来说,这是如何工作的呢。我不太明白如何以正确的方式添加x+[y]…谢谢!那么对于这个[x+[y]对于x在池中对于y的结果]来说,这是如何工作的呢。我不太明白如何以正确的方式添加x+[y]。@Ablu_68我已经更新了答案以显示该示例。至于为什么它们以正确的方式追加,那是因为首先,我们有
结果=[[]]
,然后我们通过第一个
池(
[“a”,“b”]
)并将其追加到
结果中的所有内容中,给我们
[[[“a”],[“b”]
。然后我们将第二个
池中的每个元素(
[“a”、“c”、“d”]
)附加到
结果中的每个元素上,得到
[“a”、“a”]、[“a”、“c”]、[“a”、“d”]、[“b”、“a”]、[“b”、“c”]、[“b”、“d”]
,依此类推。希望这是有道理的。@Winstone Yess这正是我要找的!这是完全有道理的,我现在觉得有点傻,因为我自己没有看到它:)非常感谢。谢谢那么对于这个[x+[y]对于x在池中对于y的结果]来说,这是如何工作的呢。我不太明白如何以正确的方式添加x+[y]。@Ablu_68我已经更新了答案以显示该示例。至于为什么它们以正确的方式追加,那是因为首先,我们有
结果=[[]]
,然后我们通过第一个
池(
[“a”,“b”]
)并将其追加到
结果中的所有内容中,给我们
[[[“a”],[“b”]
。然后我们将第二个
池中的每个元素(
[“a”、“c”、“d”]
)附加到
结果中的每个元素上,得到
[“a”、“a”]、[“a”、“c”]、[“a”、“d”]、[“b”、“a”]、[“b”、“c”]、[“b”、“d”]
,依此类推。希望这是有道理的。@Winstone Yess这正是我要找的!这是完全有道理的,我现在觉得有点傻,因为我自己没有看到它:)非常感谢。