List()函数不会将字符串转换为期望的列表

时间:2018-12-28 22:23:48

标签: python python-2.7 list

我正在学校上Python课,在做作业时,遇到了一些奇怪的事情。

如果我输入以0开头的字符串,则表示列表创建不正确(下面的代码)。例如,如果我输入'000000'作为输入,则会打印出['0']而不是['0', '0', '0', '0', '0', '0']。此外,如果我提供'000111'作为输入,则会打印出['7', '3']。为什么创建的列表不是预期的原因?如果有帮助,代码可以在Python 2.7.10版的Repl.it上运行。

variable = list(str(input('')))
print(variable)

我期望输入'000000'的输出为['0', '0', '0', '0', '0', '0'],但实际输出为['0']

1 个答案:

答案 0 :(得分:3)

python-2中的input()函数将输入作为python代码。这意味着要执行的结果为“ 00000”(因为将00000当作int且其值为0),所以将其执行为0。因此,您应该考虑使用raw_input()而不是input()。

>>> var = list(str(raw_input("")))
00000
>>> print(var)
['0', '0', '0', '0', '0']

对于python-3来说,没有raw_input()这样的东西;因为input()取代了它。

也;在python-2;不允许使用带前导零的非零十进制数字。因为它们被视为八进制数,因此被转换为十进制数系统。此内容已在python版本3中删除。 See here for docs referal

# python-2 interpreter
>>> max(0345, 344)
344    # since 345(of octal) in decimal number system is 229

这就是为什么000111被当做73然后再被str()对待的原因;它变成了list()