我无法理解这段代码:

时间:2017-09-12 22:03:54

标签: python python-3.x

我正在尝试使用二维列表/元组,因为我想将它们用于我的想法。我一直很难理解for指令,它对我没有任何意义,它感觉不直观。问题是我只是不理解for指令。我得到了显示这个简单元组的代码:

m=((1,2),(3,4),(5,6))

for i in range(len(m)):
    for j in range(len(m[i])):
        print(m[i][j]," ",end="")
        print()

显示:

1 2
3 4
5 6

我真的不知道代码的这些部分是什么(m[i])m[i][j]我知道len是什么。

此外,我尝试将[]更改为(),因为它们应该是元组的一部分,但是我收到的错误是:

  

发生TypeError Message ='tuple'对象不可调用

如果删除部分代码,结果会显示括号,但此代码会以某种方式删除元组中的所有括号:

m=((1,2),(3,4),(5,6))

for i in range(len(m)):

    print(m[i])
    print()

例如,这个显示基本相同的结果,但括号:

(1,2)
(3,4)
(5,6)

这里发生了什么?

编辑:

在答案之下我遵守帮助我了解一切的代码我并不理解和解释它,感谢所有你的答案,如果没有你的输入,你就不能做到这一点。 < / p>

4 个答案:

答案 0 :(得分:3)

外部for循环遍历m 索引中的每个元组:

>>> m = ((1,2),(3,4),(5,6))
>>> for i in range(len(m)):
        print(m[i])


(1, 2)
(3, 4)
(5, 6)

内部(嵌套)for循环遍历m[i]指定的每个元组,也索引,并在一行上打印它的内容:

>>> m = ((1,2),(3,4),(5,6))
>>> # loop through each tuple in `m` index-wise
>>> for i in range(len(m)):
    # loop through each element in each tuple index-wise
        for j in range(len(m[i])):
        # print each element on a single line.
            print(m[i][j]," ",end="")
        # print a newline
        print()


1  2  
3  4  
5  6  

这种尴尬的原因是因为你没有使用for - 循环使用它们的方式,即惯用。 Python for - 循环用于迭代集合元素明细,而不是索引式。根本不需要使用rangelen。直接遍历mm中的每个元组:

for tup in m:
    for num in tup:
        print(num," ",end="")
    print()

正如您所看到的,上述内容更易于编写和理解。

答案 1 :(得分:0)

如何初始化2d数组和元组:

myarr = [[1, 2], [3, 4]] # A 2d array mytuple = ((5, 6), (7, 8)) # A 2d tuple

如何访问2d列表:

print(myarr[0]) # = [1, 2] print(myarr[1][0]) #get the 1st element of the second array in myarr = 3

您以相同的方式访问2d元组:

print(mytuple[0]) # = (5, 6) print(mytuple[1][0]) #get the 1st element of the second tuple in myarr = 7

执行mytuple(1)正在尝试调用函数&#39; mytuple&#39;,这显然是元组而不是函数,因此存在错误。

答案 2 :(得分:0)

首先,我将通过澄清元组和列表之间的不同,如何访问它们来消除您的困惑:

第一个列表:也称为序列,序列的每个元素都被赋予一个数字 - 它的位置或索引。第一个索引为零,第二个索引为1,依此类推

要访问它的元素,你应该使用[index]索引(你想要得到的元素的位置)

第二元组:一系列不可变的 Python对象。元组是序列,就像列表一样。元组和列表之间的区别是,元组不能更改,不像列表和元组使用括号,而列表使用方括号。

要访问它的值,您还可以使用[index]索引(要获取的元素的位置)

您的代码对列表和元组都有效:

 m = ((1,2),(3,4),(5,6))
 #loop through each tuple in `m` 
 for i in range(len(m)):
    #loop through each element in each tuple 
        for j in range(len(m[i])):
        #print each element on a single line.
            print(m[i][j]," ",end="")
        #print a newline
        print()

答案 3 :(得分:0)

基于我从你们那里得到的所有信息,我写了这个:

m=((1,2),(3,4),(5,6))


for i in range(len(m)):
    for j in range(len(m[i])):
        print(m[i][j]," ",end="")
    print()

print()
print(len(m))
print(len(m[i]))
print()

for tup in m:
    for elem in tup:
        print(elem, end=' ')
    print()

print()
print()

for tup2 in m:
    for num in tup2:
        print(num," ",end="")
    print()

print()
print()
print("333",end=" ")
print("4444",end=" ")
print("55555")

令我感到困惑的是,我并不知道&#34; i&#34;的价值是什么?和&#34; j&#34;然后最重要的是打印正在做的事情也增加了这种混乱,所以我只打印了#34; i&#34;和&#34; j&#34;然后他们分别是3和2,然后在了解了印刷品的作用之后我就明白了。

- 首先是3个循环,3个来自元组的len

- 之后它根据其他3个元组的len做了2个循环  2

- 最后它打印每个元素,如m [i] [j],这意味着它将从元素0,0开始,然后是0,1,然后是1,0,然后是1,1然后是2.0,然后是2,1

这将是&#34;地图&#34;元组:

(0,0)(0,1)

(1,0)(1,1)

(2,0)(2,1)

每个元素都有它的坐标第一个元素是0,0,第二个元素是0,1等等。

要像这样打印而不是单行打印,请使用:

 print(m[i][j]," ",end="")
print()

我对此的理解是&#34; &#34;只是一个空间,无论如何,但结束&#34;&#34;)正在使代码不会破坏线条,从而在一条线上打印每个循环并结束它用空格打印的每一行所以它不会一个接一个地打印结果,另一个print()只是添加一个断行以使其更具可读性。#/ p>

所有我感谢你们,因为我之前没有看到这个,为什么我得到错误,为什么我不理解for循环,为什么我可以用更简单的方式完成它。

现在一切都很清楚,谢谢大家。