【问题标题】:Don't understand the meaning of this: n, S = map(int, input().split()) (In Dynamic Programming)不明白这个意思:n, S = map(int, input().split()) (In Dynamic Programming)
【发布时间】:2019-11-23 13:14:18
【问题描述】:

我正在尝试学习动态编程,但是有一些难以理解的代码行。我想我们应该如何处理这些代码行:

n, S = map(int, input().split())
w = list(map(int, input().split()))
dp = [0] * (S + 1)
dp[0] = 0

【问题讨论】:

  • 请将完整代码发布到问题中(格式正确)。

标签: python algorithm variables dynamic


【解决方案1】:

这与动态规划本身没有太大关系。

n, S = map(int, input().split())

将查询用户输入,然后将其拆分为单词,将这些单词转换为整数,并将其解压缩为两个变量nS。因此,当用户输入两个数字(不多也不少)时,这将成功。

它的工作原理如下:

  1. input()会查询用户输入,读取一行用户输入;
  2. .split() 会将输入拆分为“单词”列表;
  3. map(int, ...) 会在每个单词上调用int,它会懒惰地(尽管这在这里并不重要);和
  4. n, S = ... 会将表达式解包为两个元素,并将第一个元素分配给n,将第二个元素分配给S

例如:

>>> n, S = map(int, input().split())
14 25
>>> n
14
>>> S
25

但是如果你只传递一个数字,三个数字等就会出错,比如:

>>> n, S = map(int, input().split())
14
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: not enough values to unpack (expected 2, got 1)
>>> n, S = map(int, input().split())
14 25 37
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>> n, S = map(int, input().split())
foo bar
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'foo'

行:

w = list(map(int, input().split()))

或多或少做同样的事情,但取而代之的是从用户输入一个数字序列。可以有零个、一个或多个数字。 w 将存储一个数字列表。 list(..) 部分强制 Python 急切地评估 map(..)

dp = [0] * (S + 1)

在这里,我们将构造一个带有S + 1 零的列表。在 Python 中,您可以将列表(和元组)与整数 n 相乘。结果是一个列表(或元组),它是原始列表的 n 倍,并且它重复元素。例如:

>>> [1,4,2,5] * 3
[1, 4, 2, 5, 1, 4, 2, 5, 1, 4, 2, 5]

由于这里给定的列表包含 一个 零,因此它将生成一个包含 S+1 零的列表。

终于

dp[0] = 0

将第一个元素设置为零。但既然已经如此,这条线就不是很有用了。

【讨论】:

  • 谢谢,但是这里的操作员很难理解,有什么技巧可以学习这些东西吗?
  • @QuânĐoàn:什么运算符?
  • 对不起,我的意思是这里的语法有点复杂。我怎样才能习惯这些事情
猜你喜欢
  • 2022-11-15
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
相关资源
最近更新 更多