【问题标题】:Leading zeros are not allowed in Python?Python中不允许前导零?
【发布时间】:2020-07-22 04:08:23
【问题描述】:

我有一个代码用于查找列表中给定字符串的可能组合。但是面临前导零出现错误的问题,例如 SyntaxError: 十进制整数文字中的前导零是不允许的;对八进制整数使用 0o 前缀。如何克服这个问题,因为我想传递带有前导零的值(不能一直手动编辑值)。下面是我的代码

def permute_string(str):
    if len(str) == 0:
        return ['']
    prev_list = permute_string(str[1:len(str)])
    next_list = []
    for i in range(0,len(prev_list)):
        for j in range(0,len(str)):
            new_str = prev_list[i][0:j]+str[0]+prev_list[i][j:len(str)-1]
            if new_str not in next_list:
                next_list.append(new_str)
    return next_list

list = [129, 831 ,014]
length = len(list)
i = 0

# Iterating using while loop
while i < length:
    a = list[i]
    print(permute_string(str(a)))
    i += 1;

【问题讨论】:

  • 带0的数字从何而来?如果它们在您的代码中,请不要编写它们。另外,请删除与您的问题无关的所有内容(仅list = [129, 831 ,014] 行相关,其他所有内容均不相关。)另外,删除标签 3.x 或 2.7 之一:这两种语言处理前导零不同。
  • 您可以使用字符串代替数字:list = ['129', '831' ,'014']
  • „我想传递带前导零的值“请说明您是否真的想传递带前导零的整数 literals 或带前导的整数 零。两者需要非常不同的方法——第一种需要嵌入到字符串中,后者没有明确定义,需要完全不同的程序设计。
  • 有什么方法可以将整数列表转换为带前导零的字符串?
  • 整数没有前导零。它们只是值——没有办法区分 0xA0 和 0o12 和 10 的 ,也没有办法区分使用任意数量的前导零创建的相同值(通过调用 int 而不是使用文字)。一旦你创建了一个“带前导零”的整数列表,这些零就消失了。

标签: python python-3.x


【解决方案1】:
以 0 开头的

整数 literals 在 python 中是非法的(显然,除了 0 本身),因为有歧义。以 0 开头的整数文字具有以下字符,该字符确定它属于哪个数字系统:0x 用于十六进制,0o 用于八进制,0b 用于二进制。

至于整数本身,它们只是数字,数字永远不会以零开头。如果您有一个表示为字符串的整数,并且它恰好有一个前导零,那么当您将其转换为整数时它将被忽略:

>>> print(int('014'))
14

鉴于您在这里尝试执行的操作,我将重写列表的初始定义:

lst = ['129', '831', '014']
...
while i < length:
    a = lst[i]
    print(permute_string(a))  # a is already a string, so no need to cast to str()

或者,如果您需要 lst 成为整数列表,具体来说,那么您可以通过使用格式字符串文字而不是 str() 调用来更改将它们转换为字符串的方式,这样您就可以pad the number with zeros:

lst = [129, 831, 14]
...
while i < length:
    a = lst[i]
    print(permute_string(f'{a:03}'))  # three characters wide, add leading 0 if necessary

在整个答案中,我使用 lst 作为变量名,而不是您问题中的 list。你不应该使用list作为变量名,因为它也是代表内置列表数据结构的关键字,如果你命名一个变量,那么你就不能再使用关键字了。

【讨论】:

  • 请注意,带前导零的整数文字在 Python 2 中是可以的,但我认为它们默认为八进制,这在 Python 3 中已更改。您对当前事务状态的描述是完全准确的。我认为 Python 做出这个决定很不幸,因为前导零不应该很重要。
  • @Green Cloak Guy,我无法将值编辑为 2 位,因为这些值将始终为 3 位(也包含前导零)。
  • 有没有办法将整数列表转换为字符串。这样我就可以解决我的问题了。
  • @Midhun 如果其他人给你的价值观,那没关系。只有当你用自己的代码编写它们时,你如何编写它们才重要——就像我说的那样,integer literal,而不是 integer。为什么不能编辑自己的代码来更改 lst 的定义方式?
  • 整数字面量不能以 0 开头的规则当然有一个例外,那就是 0 本身。 (构建解析器很有趣,真的。)
【解决方案2】:

终于,我得到了答案。下面是工作代码。

def permute_string(str):
    if len(str) == 0:
        return ['']
    prev_list = permute_string(str[1:len(str)])
    next_list = []
    for i in range(0,len(prev_list)):
        for j in range(0,len(str)):
            new_str = prev_list[i][0:j]+str[0]+prev_list[i][j:len(str)-1]
            if new_str not in next_list:
                next_list.append(new_str)
    return next_list

#Number should not be with leading Zero
actual_list = '129, 831 ,054, 845,376,970,074,345,175,965,068,287,164,230,250,983,064'
list = actual_list.split(',')
length = len(list)
i = 0

# Iterating using while loop
while i < length:
    a = list[i]
    print(permute_string(str(a)))
    i += 1;

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2013-07-19
    • 1970-01-01
    • 2010-10-25
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多