用于循环的一行用于2d列表,具有可变增量和2d列表搜索

时间:2015-11-10 09:27:49

标签: python arrays python-3.x multidimensional-array

我是python one liner loop的新手。

我希望用户将数据输入到2d列表中,同时提醒他们将输入的数据索引。 我的代码是:

flag=0
x=[[int(input("enter the "+ str(flag)+ "number:")) flag+=1 for x in range(0,col)]for y in range(0,row)] 

上面的代码显示了语法错误。我应该如何增加标志值和一行for循环。

接下来就是我要在2d列表中搜索整数值

x=[[0,3,2],[1,1,1],[9,2,2]]
for i,j in enumerate(x):
    try:
        y=j.index(1)
    except ValueError:
        continue
    print(i,y)

上面的代码适用于单个项目搜索,但我想要列表中每1的索引。而上述代码只返回第一个" 1"它会遇到,即" 1 0"

提前谢谢。

1 个答案:

答案 0 :(得分:2)

你的问题是列表理解必须产生一个值,并且你试图在其中执行flag +=1

如果你这样做会更清楚:

>>> flag = 0
>>> row = 1
>>> col = 3
>>> x=[[int(input("enter the number [{}][{}]:".format(y, x))) for x in range(0,col)] for y in range(0,row)]
enter the number [0][0]:1
enter the number [0][1]:2
enter the number [0][2]:3
>>> x
[[1, 2, 3]]

或者,为了达到您想要的效果,您可以执行以下操作:

>>> y=[[int(input("enter the {} number:".format(x+y*row))) for x in range(0,col)]for y in range(0,row)]
enter the 0 number:1
enter the 1 number:2
enter the 2 number:3
>>> y
[[1, 2, 3]]

问题第二部分的更新: 您可以使用更多列表推导:

>>> y=[[int(input("enter the {} number:".format(x+y*row))) for x in range(0,col)]for y in range(0,row)]
enter the 0 number:0
enter the 1 number:1
enter the 2 number:1
>>> y
[[0, 1, 1]]
>>> for arr in y:
...   print [index for (index, val) in enumerate(arr) if val == 1]
...
[1, 2]