不了解其含义:n,S = map(int,input()。split())(在动态编程中)

时间:2019-07-14 17:08:32

标签: python algorithm variables dynamic

我正在尝试学习动态编程,但是有些难懂的代码行却很难理解。知道我们应该如何处理以下几行代码:

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

1 个答案:

答案 0 :(得分:3)

这与动态编程本身无关。

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]

由于此处给定的列表包含 one 零,因此它将产生包含S+1零的列表。

最后

dp[0] = 0

会将第一个元素设置为零。但是既然已经是这种情况,那么此行就不是很有用。