Python 3.x 通过列表理解输入的功能是什么?

Python 3.x 通过列表理解输入的功能是什么?,python-3.x,input,list-comprehension,Python 3.x,Input,List Comprehension,你知道当你通过尝试和错误找到解决方案时,你会绊倒太多以至于你现在无法理解答案吗 这件作品正发生在我身上: entr = [list(int(x) for x in input().split()) for i in range(int(input()))] 通过复制和粘贴整个块完成输入: 9 8327 0 0070 0 2681 2 1767 0 3976 0 9214 2 2271 2 4633 0 9500 1 我的列表理解在每个步骤中具体做了什么?考虑到:如何使用for循环重写它 这相

你知道当你通过尝试和错误找到解决方案时,你会绊倒太多以至于你现在无法理解答案吗

这件作品正发生在我身上:

entr = [list(int(x) for x in input().split()) for i in range(int(input()))]
通过复制和粘贴整个块完成输入:

9
8327 0
0070 0
2681 2
1767 0
3976 0
9214 2
2271 2
4633 0
9500 1

我的列表理解在每个步骤中具体做了什么?考虑到:如何使用for循环重写它

这相当于:

entr = []
for i in range(int(input())):
    row = []
    for x in input().split():
        row.append(int(x))
    entr.append(row)
您可以通过几个步骤将其复制粘贴到列表中。首先是内部循环/列表:

entr = []
for i in range(int(input())):
    row = [int(x) for x in input().split()]
    entr.append(row)
没有
变量:

entr = []
for i in range(int(input())):
    entr.append([int(x) for x in input().split()])
然后是外部循环/列表(为了清晰起见,复制了多行):

您具有相同的嵌套理解,除了内部理解是作为传递给
list
构造函数的生成器编写的,因此它看起来像
list(int(x)for x in input().split())
,而不是
[int(x)for x in input().split()]
。这比使用列表理解更令人困惑


我希望这个解释有帮助

事实上,您的代码不是嵌套的列表理解,因为您使用的是
list
construtor,而不仅仅是列表理解。 这行代码与您的代码相同:

entr = [[int(x) for x in input().split()] for i in range(int(input()))]
要理解这一行,您必须记住python中列表理解的基本结构,它包括两个组件
obj
condition
,并用方括号括起来

lst = [obj condition]
可以将其转换为如下循环:

lst = []
condition:
    lst.append(obj)
那么,回到这个问题上来。 您现在需要做的是将嵌套列表理解分解为循环中的循环,通常从后面的条件开始,从外部空间到内部空间。你得到:

entr = []
for i in range(int(input())):
    entr.append([int(x) for x in input().split()])) # the obj is a list in this case.
现在,您可以在第3行中打破列表

entr = []
for i in range(int(input())):
    entry = []
    for x in input().split():
        entry.append(int(x))
    entr.append(entry)
所以,现在原始行的内容可以很容易理解了

  • 程序构造一个名为
    entr
    的条目列表
  • 该程序要求用户输入,并将输入的
    字符串
    转换为
    int
    ,这是您要输入的入口数(假设它是
    num
  • 该程序要求用户输入
    num
    次,每次都应输入空格分隔的内容
  • 程序将每个字符串拆分为一个列表(在上面的代码中名为
    entry
    ),您可以使用
    str.split()
    方法(参数
    sep
    默认为空格)输入该列表。并在每个循环中添加每个
    条目
    列表
  • 对于
    条目
    列表中的每个元素,它都转换为
    int

  • 我的英语可能不好,请随意改进我的答案:)

    非常感谢您的帮助。我现在很清楚了,很高兴你明白了。
    entr = []
    for i in range(int(input())):
        entry = []
        for x in input().split():
            entry.append(int(x))
        entr.append(entry)