用python编写的这个函数可以转置一个矩阵:
def transpose(m):
height = len(m)
width = len(m[0])
return [ [ m[i][j] for i in range(0, height) ] for j in range(0, width) ]
在这个过程中,我意识到我不能完全理解单行嵌套的for循环是如何执行的。请通过回答以下问题来帮助我理解:
给定,
[ function(i,j) for i,j in object ]
为了使用这个structure?
更多的信息也是值得感谢的。
发布于 2013-06-09 13:26:17
最好的信息来源是official Python tutorial on list comprehensions。列表理解几乎与for循环相同(当然,任何列表理解都可以写成for循环),但它们通常比使用for循环更快。
请看本教程中较长的列表理解( if
部分过滤理解,只有通过if语句的部分才会传递到列表理解的最后部分(这里是(x,y)
):
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
它与这个嵌套的for循环完全相同(正如本教程所述,请注意for和if的顺序是如何相同的)。
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
列表理解和for循环之间的主要区别是for循环的最后一部分(在这里您要做一些事情)是在开始而不是结束。
关于你的问题:
为了使用这个
循环结构,对象必须是什么类型?
一个iterable。可以生成(有限)元素集的任何对象。其中包括任何容器、列表、集合、生成器等。
将i和j分配给object中的元素的顺序是什么?
它们的赋值顺序与从每个列表中生成它们的顺序完全相同,就好像它们是嵌套在一个for循环中一样(对于您的第一个理解,您应该为i获取1个元素,然后从j获取每个值,然后将第二个元素赋给i,然后从j获取每个值,依此类推)。
可以用不同的for循环结构来模拟吗?
是的,上面已经显示了。
这个for循环可以嵌套在类似或不同的for循环结构中吗?那会是什么样子呢?
当然,但这不是个好主意。例如,这里给出了一个字符列表:
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]
发布于 2020-04-27 14:37:25
通过使用zip
函数,可以在同一行中使用两个for循环
代码:
list1 = ['Abbas', 'Ali', 'Usman']
list2 = ['Kamran', 'Asgar', 'Hamza', 'Umer']
list3 = []
for i,j in zip(list1,list2):
list3.append(i)
list3.append(j)
print(list3)
输出:
['Abbas', 'Kamran', 'Ali', 'Asgar', 'Usman', 'Hamza']
因此,通过使用zip函数,我们可以使用两个for循环,也可以迭代同一行中的两个列表。
发布于 2019-09-17 14:08:37
下面的代码是嵌套循环的最佳示例,当使用两个for循环时,请记住第一个循环的输出是第二个循环的输入。在使用嵌套循环时,循环终止也很重要
for x in range(1, 10, 1):
for y in range(1,x):
print y,
print
OutPut :
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
https://stackoverflow.com/questions/17006641
复制相似问题