Python 一行用于循环,用于变量递增和二维列表搜索的二维列表

Python 一行用于循环,用于变量递增和二维列表搜索的二维列表,python,arrays,python-3.x,multidimensional-array,Python,Arrays,Python 3.x,Multidimensional Array,我不熟悉python单行循环 我希望用户将数据输入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

我不熟悉python单行循环

我希望用户将数据输入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”的索引,即“10”


提前谢谢。

您的问题是列表理解必须产生一个值,并且您正在尝试在其中执行
标志+=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]

不要在意这一点,因为我还没有花太多时间回答你的问题。但是您是否考虑过让您的代码在不使用一行程序的情况下运行?扩展你的代码,一旦它工作了,如果你必须的话,把它修剪成一行。@Torxed是的,我已经做了,它工作得很好,但这就是问题所在,我无法缩小它。顺便说一句,谢谢你的建议,你能发布代码吗?对我们来说,阅读扩展的代码块更容易,我们可以根据您在上面的尝试缩小它。@Torxed我得到了答案,但无论如何还是非常感谢。:)对于第二部分,我想搜索列表中的每个“1”,而我的代码只返回它遇到的第一个“1”的索引,即“10”,我更新了,以包含问题第二部分的示例