当我删除“,0”时,它会引发错误,当它出现时,它会显示正确的输出。我想知道它的用途。
import sys
from collections import Counter
input()
socks,pairs = Counter(map(int,input().strip().split())),0
for s in socks:
pairs = pairs + socks[s] // 2
print(pairs)
答案 0 :(得分:2)
您将在此行中分配两个变量(socks
和pairs
):
socks,pairs = Counter(map(int,input().strip().split())),0
如果省略,0
,就好比写:
socks = Counter(map(int,input().strip().split()))
pairs =
出现错误。
答案 1 :(得分:1)
此:
socks, pairs = Counter(map(int,input().strip().split())), 0
翻译为:
(socks, pairs) = (Counter(map(int,input().strip().split())), 0)
就好像您写了:
socks = Counter(map(int,input().strip().split()))
pairs = 0
右边的区别在分配作业之前已得到充分评估,但这在这里无关紧要
但是元组的大小必须匹配。省略,0
时,它将变为:
(socks, pairs) = (Counter(map(int,input().strip().split())), )
如您所见,大小不匹配。这就是导致问题的原因。
答案 2 :(得分:0)
这称为元组分配。例如,如果您要初始化两个变量x和y并为其分配两个值a和b,则可以使用以下方法做到这一点:
x = a
y = b
或者只是:
x, y = a, b
在这种情况下,第一个值“ a”将分配给第一个变量“ x”,第二个值“ b”将分配给第二个变量“ y”。在这种情况下,无需使用temp变量即可交换两个值,这非常强大: x,y = y,x
在您的情况下,您要初始化两个变量:袜子和袜子,因此必须跟随两个值。就您而言:
socks = Counter(map(int, input().strip().split()))
pairs = 0
因此,很明显您不能将一个值分配给两个变量。因此您无法删除0(成对的初始值),它是在循环时在其上累积的保留变量。