python-3.x 如何使用List Comprehension打印二维列表?[副本]

lawou6xi  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(150)

此问题已在此处有答案

How do I make a flat list out of a list of lists?(37答案)
11天前关闭
我是编程新手,开始学习Python编程(纯粹是为了热闹)。所以在学习2D列表和列表理解的时候。我得到了一个错误为'无效语法',而试图打印一个二维列表使用列表理解。老实说,我对列表理解有点困惑。对列表理解的详细解释将是很棒的。

st=input().split()
n,m=int(st[0]),int(st[1])
st=st[2:]
li=[[int(st[m*i + j]) for j in range(m)] for i in range(n)]
print(' '.join([str(ele) for ele in row])) for row in li

0s7z1bwu

0s7z1bwu1#

你的代码写得很好,但如果满足某些条件,它就会崩溃。预期的输入看起来像'2 3 1 2 3 4 5 6',其中前两个是维度,其余的是数组的内容。现在,如果您要输入'5 5 2',则脚本需要25个内容值,但它只接收到1个值'2'。
您显示的错误是因为您试图在列表之外使用列表解析语法。例如:

print([i for i in range(10)])
#OUTPUT: 0 1 2 3 4 5 6 7 8 9

print(i for in range(10))
#OUTPUT: SyntaxError: invalid syntax

上面的示例显示了您的错误的简化示例。
下面是你的代码的一个版本,它有描述性的注解来描述当列表解析被调用时它在做什么。

# We need to know how big to make the array, Let's do this below with inputs.
print('Enter m:')
m = int(input())
print('Enter n:')
n = int(input())
print('m: ',m,' n: ',n)

#Let's now get the values for the array. Let's do this with inputs again.

print('Enter ',m*n,' values below, delimited by spaces. (ex. `1 2 3 4 5 ...`):')
nums = input().split()
nums = [int(i) for i in nums] #Using list comprehension to change strs to ints

#Now let's assign those vals to an array
ar = [nums[i*m:i*m+m] for i in range(n)] #using List comprension to distribute nums into an array
print('Your Array: ',ar)

#Now lets print it cleanly.
print('Your Array, Printed Cleanly:')
for i in ar:
    row = ""
    for j in i:
        row = row+str(j)+' '
    print(row)

运行此代码并输入描述性值,将得到:

Enter m:
> 2
Enter n:
> 5
m:  2  n:  5
Enter  10  values below, delimited by spaces. (ex. `1 2 3 4 5 ...`):
> 0 1 2 3 4 5 6 7 8 9
Your Array:  [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]]
Your Array, Printed Cleanly:
0 1 
2 3 
4 5 
6 7 
8 9

相关问题