首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从字符串列表中选择数字

从字符串列表中选择数字
EN

Stack Overflow用户
提问于 2016-06-23 08:21:23
回答 5查看 839关注 0票数 2

我想将字符串列表转换为数字列表,但是没有运气。

我的绳子就像

代码语言:javascript
运行
复制
x=[u'9-9', u'-5-5',u'-45-45',u'99-99']

我想把它转换成:

代码语言:javascript
运行
复制
x=[9,-5,-45,99]

我尝试在列表中循环并替换'-‘,在列表中的每个字符串中使用string.replace('-','')删除'-’,并将这个数字分成2步,但是字符串保持有字符'-‘替换不起作用’。

我的一些代码:

代码语言:javascript
运行
复制
import string
x=[u'9-9', u'-5-5',u'-45-45',u'99-99']
for i in x:
    string.replace(str(i),"-",' ')
    print i

产出:

代码语言:javascript
运行
复制
9-9
-5-5
-45-45
99-99

有什么帮助吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-06-23 08:33:21

正如所指出的,python中的字符串是不可变的。对它们的操作返回新字符串,而不是更改原始字符串。您的输出需求也是一个整数列表,因此您必须解析字符串:

代码语言:javascript
运行
复制
In [1]: x=[u'9-9', u'-5-5',u'-45-45',u'99-99']

In [2]: [int(i.rsplit('-', 1)[0]) for i in x]
Out[2]: [9, -5, -45, 99]

使用列表理解,字符串是从右开始 1,每次只使用'-'作为分隔符,第一个字符串被拾取并解析为整数。

票数 4
EN

Stack Overflow用户

发布于 2016-06-23 08:46:45

使用正则表达式:

代码语言:javascript
运行
复制
import re

x = [u'9-9', u'-5-5',u'-45-45',u'99-99']
regex = "([-]?\d*)-.*"

x = [int(re.search(regex, m).group(1)) for m in x]
print(x)
# [9, -5, -45, 99]
票数 3
EN

Stack Overflow用户

发布于 2016-06-23 08:24:38

str.replace不在现场.它返回一个带有替换字符的新字符串。因此:

代码语言:javascript
运行
复制
for i in x:
    string.replace(str(i),"-",' ')

不会影响x中的字符串。

您还应该直接在您拥有的string对象上调用replace,而不是从string模块调用通用replace

相反,你应该做的是:

代码语言:javascript
运行
复制
x = [u'9-9', u'-5-5',u'-45-45',u'99-99']
x_int = [int(string.replace('-', '')) for string in x]
print x_int
>> [99, 55, 4545, 9999]

只需一点代码就可以强调str.replace返回一个新字符串:

代码语言:javascript
运行
复制
x = [u'9-9', u'-5-5',u'-45-45',u'99-99']
for i in x:
    print i.replace(,"-",'')
    print i
>> 99
   9-9
   55
   -5-5
   4545
   -45-45
   9999
   99-99
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37985950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档