了解Python 3.7中的For循环执行

时间:2018-07-18 04:25:21

标签: python python-3.x

我在Jupyter笔记本中执行了三种不同的for循环操作。代码在下面给出

首先循环

b = {}
temp_1 = []
for x in range(0,4):
    y = [4,5]
    temp_1.append(x*y)
b[x] = temp_1
print("\n First for loop output \n",b)

第二个循环

b = {}
temp_1 = []
for x in range(0,4):
    for y in range(4,6):
        temp_1.append(x*y)
    b[x] = temp_1
print("\n 2nd for loop output \n",b)

第三次循环

b = {}
temp_1 = []
for x in [0,1,2,3]:
    for y in [4,5]:
        temp_1.append(x*y)
    b[x] = temp_1
print("\n 3rd for loop output \n",b)

第一个输出用于循环输出

{0: [[], [4, 5], [4, 5, 4, 5], [4, 5, 4, 5, 4, 5]], 1: [[], [4, 5], [4, 5, 4, 5], [4, 5, 4, 5, 4, 5]], 2: [[], [4, 5], [4, 5, 4, 5], [4, 5, 4, 5, 4, 5]], 3: [[], [4, 5], [4, 5, 4, 5], [4, 5, 4, 5, 4, 5]]}

第二个用于循环输出

{0: [0, 0, 4, 5, 8, 10, 12, 15], 1: [0, 0, 4, 5, 8, 10, 12, 15], 2: [0, 0, 4, 5, 8, 10, 12, 15], 3: [0, 0, 4, 5, 8, 10, 12, 15]}

第3个用于循环输出

{0: [0, 0, 4, 5, 8, 10, 12, 15], 1: [0, 0, 4, 5, 8, 10, 12, 15], 2: [0, 0, 4, 5, 8, 10, 12, 15], 3: [0, 0, 4, 5, 8, 10, 12, 15]}

Q1:我是Python的初学者。我一直在用MATLAB C和Arduino UNO控制器进行简单的编码。从字面上看,我无法理解for循环如何在Python中工作。特别是,在First for循环以及Second和Third中发生了什么。

Q2:我想要类似{0:[0,0], 1:[4,5],2:[8,10],3:[12,15]}的输出。您能否以适当的代码帮助我,以获取此输出。

3 个答案:

答案 0 :(得分:5)

尝试一下:

b = {}
for x in [0,1,2,3]:
    temp_1 = []
    for y in [4,5]:
        temp_1.append(x*y)
    b[x] = temp_1
print("\n 3rd for loop output \n",b)

在第一个循环中,您要乘以列​​表[4,5],这不是您想要的,因为它不是元素级的。阅读http://thepythonguru.com/python-lists/,了解操作符如何在Python列表上工作。 第二和第三循环是相同的;您只需要在temp_1的每次迭代中清除x列表即可。

答案 1 :(得分:1)

对于第一个for循环,您将一个列表与一个数字相乘,然后追加到另一个列表(temp_1)。将列表与数字n相乘等效于将列表中的元素重复n次。由于您要在x的每次迭代之后追加到另一个列表,因此x * y值将追加到新行上。当您执行b [x] = temp_1时,它将为x的每次迭代重复temp_1的值。因此是2D列表。

for循环的第二种情况和第三种情况基本相同,因为range(0,4)会生成列表[0,1,2,3],就像您在情况3中手动完成的一样。当y取值时从range(4,6)开始,我们逐一遍历每个值,然后乘以x(代表range(0,4)中的各个值)。因此,我们不断乘以单个元素,并得到temp_1 = [0,0,4,4,5,8,10,12,15]。与先前使用b [x] = temp_1的情况类似,此值在x的每次迭代中重复一次。

要获得上面提到的结果,可以使用Massoud Hosseinali提到的方法。希望这可以帮助!

答案 2 :(得分:1)

对于您的第一个for循环,y = [4,5](它是一个列表的整体)重复x次。

>>> y=[4,5]
>>> 0*y
[]
>>> 2*y
[4, 5, 4, 5]
>>> 3*y
[4, 5, 4, 5, 4, 5]

对于第二个和第三个for循环,“ [4,5]中的y:”和“ range(4,6)中的y:”相同,因此得到相同的结果。显然,结果是错误的,因为字典中所有键的所有值都相同。这是因为您将'temp_1 = []'置于for循环之外。请注意,“ b [x] = temp_1”表示b [x]和temp_1指向同一对象,因为Python通过传递引用来处理对象,因此每次更新“ temp_1”时,b [0]〜b [x ]被更新为相同的值。您可以使用内置函数id()来检查内存中对象的地址。

>>> x = {0: 'apple'}
>>> y = x
>>> y
{0: 'apple'}
>>> id(x)
55111152
>>> id(y)
55111152