将字符串转换为负数

时间:2017-02-08 00:18:51

标签: python python-2.7

我需要从字符串类型转换为数字

list = ["-5","4","-3","variable"]  # Input

list = [-5,4,-3,"variable"]        # epected output

转换负数

时遇到问题
list[0]=int(list[0])
  

ValueError:基数为10的int()的无效文字:' -5'

5 个答案:

答案 0 :(得分:2)

实际上,我无法重现你的错误,它只适用于python 2.7.13

>>>int("-5")
>>> -5

并在python 3.4中

所以,它可能是一个python版本的问题, 我建议更新你的python版本,重新安装更新的,从site,它将完全替换它(包装未触动),除非你使用,像anaconda这样的特殊发行版。

用于处理您的列表(混合字符和数字)使用:

try: except:  言。

答案 1 :(得分:0)

我不知道如何替换列表中的值,您必须自己找到它。这段代码

abc = "abcdefghijklmnopqrstuvwxyz" #to make sure there are no letters in the string
list = ["-5","4","-3","variable"]
def MightWork(list):
    newlist = []
    for item in list:
        if set(abc) & set(list[item]) = False:
            newlist.append(int(list[item]))
return newlist

list = MightWork(list)

可能会奏效。您的代码无效的原因是您将整个列表更改为字符串,而不是列表中的每个项目。知道了这一点,如果你有更好的解决方案,那就试试吧。

答案 2 :(得分:0)

你在上面编写的代码在python3中运行良好

list1 = ["-5","4","-3","variable"]
list2 = []
print(list1)
for item in list1:
    try:
        list2.append(int(item))
    except ValueError as e:
        list2.append(item)
print(list2)

输出

['-5', '4', '-3', 'variable']
[-5, 4, -3, 'variable']

答案 3 :(得分:0)

按照这个例子。

list=[-1,2,'car']
convert=[]
for i in list.split():
    if type(i) == str:
        try:
            convert.append(type(map(int,i)))
        except ValueError:
            convert.append(type(i))
    return convert

答案 4 :(得分:0)

我在matplotlib xticklabels文本属性中遇到了此问题。负数的减号被编码为“减号”:

  

[−]是减号(Unicode 2212)。

     

减号:[&minus];又名[&#8722];又名[&#x2212];

     

https://en.wikipedia.org/wiki/Wikipedia:Hyphens_and_dashes

Python似乎将减号编码为'hyphen-minus',Unicode 002D:

  

[-]是减号(ASCII键盘,Unicode 002D)

     

连字符减:[&#45];又名[&#x002D];

这里是一个例子:

>> import matplotlib.pyplot as plt
>> import re
>> x = [0,1,2,3,4,5]
>> y = [0,1,2,1,2,1]

>> fig,ax = plt.subplots(1)
>> plt.plot(x,y)

Scatter plot of toy data     

如果我们尝试获取xticklabel,如果要手动编辑它们,则使用:

>> l = ax.get_xticklabels()
>> ticks = [i.get_text() for i in l]
>> print(ticks)

['−1', '0', '1', '2', '3', '4', '5', '6']

>> ord(ticks[0])

8722

尝试将其转换为整数:

>> l = ax.get_xticklabels()
>> ticks = [int(i.get_text()) for i in l]

ValueError: invalid literal for int() with base 10: '−1'

这与问题中的错误相同,其他人很难重新创建。 要解决此问题,请使用正则表达式:

ticks = [int(re.sub(u"\u2212", "-", i.get_text())) for i in l]
print(ticks)
print(ticks[0] - 1)

[-1, 0, 1, 2, 3, 4, 5, 6]
-2

>> ord(ticks[0])

45