我必须将一个数字转换为链表,这样每个数字都在一个节点中并指向具有下一个数字的节点。该函数应返回链表的头部。例如,输入120应该创建节点列表1 - > 2 - > 0并返回引用。如果是负数,则说-120,它应该返回-1-> -2-> 0.I我试图这样做:
def number_to_list(number):
head,tail = None,None
for x in str(number):
if x<0:
x = -int(x)
node = Node(int(x))
else:
node = Node(int(x))
if head:
tail.next = node
else:
head = node
tail = node
return head
pass
它对正数很好但是如果我传递-120.它显示错误:
ValueError: invalid literal for int() with base 10: '-'.
我该如何解决?
答案 0 :(得分:1)
问题是你正在迭代一个字符串
for x in string(number):
使x成为一个字符,迭代字符串数。现在,当您有一个正数时,数字中的每个数字都可以转换为int。但是当你传递一个负数时,x取值' - ',它不能转换为整数。你得到错误。根据我的看法,我认为你存储列表中数字的数字的绝对值。这可以通过检查字符是否为“ - ”来完成,您可以在此迭代中让pass
无效。
if x=='-':
continue
答案 1 :(得分:1)
在带负数的第一次迭代中,你实际上是这样做的:
int('-')
答案 2 :(得分:1)
你应该添加一行代码来检查' - '(如果你允许小数值,可能还有'。'。)
if(x=='-'):
# Mark the number as negative
negative = True
# Move on to the next character
continue
答案 3 :(得分:0)
str(-120)返回' - ','1','2','0'
试试这个:
needMinus = number < 0
for x in str(abs(number)):
if needMinus:
x = -int(x)
needMinus = False
node = Node(int(x))
else:
node = Node(int(x))
if head:
tail.next = node
else:
head = node
tail = node
答案 4 :(得分:0)
当您传递负数时,在第一次迭代中调用此int('-')
。您可以保留一个布尔标记,通过该标记可以识别数字是正数还是负数。
实施例: 注意:我没有测试过这段代码。这段代码只是为了给出一个想法
def number_to_list(number):
head,tail = None,None
positive = True
for x in str(number):
if x=='-':
positive = False
continue
else:
if postive:
node = Node(int(x))
else:
node = Node(int("-"+x))
if head:
tail.next = node
else:
head = node
tail = node
return head
pass
答案 5 :(得分:0)
转换非字符串(默认情况下为10)整数会产生ValueError
:
In [1034]: int('-')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-1034-4c2a77a1869c> in <module>()
----> 1 int('-')
ValueError: invalid literal for int() with base 10: '-'
同样,int('10L'), int('0x1a'), int('abc'),
等。
如果number
实际上是负数,您可以将number
视为正数,然后在每个数字上添加一个负号:
def number_to_list(number):
head,tail = None,None
if number<0: number=-number
sign=-1 if number<0 else 1
for x in str(number):
node = Node(sign*x)
if head:
tail.next = node
else:
head = node
tail = node
return head
pass