如何以python的方式看待for循环中的for循环
我从itertools.product中找到了这段代码,以查找列表的唯一组合如何以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'], ['
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这正是我要找的!这是完全有道理的,我现在觉得有点傻,因为我自己没有看到它:)非常感谢。