从字符串列表中选择数字

时间:2016-06-23 08:21:23

标签: python string list python-2.7 replace

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

我的字符串就像

x=[9,-5,-45,99]

我想将其转换为:

string.replace('-','')

我试图在列表中循环并替换' - '在列表中的每个字符串中使用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 来删除' - '并将数字分成两个步,但字符串保持有字符' - '替换不起作用

我的一些代码:

9-9
-5-5
-45-45
99-99

输出:

base64toBlob(base64Data, contentType) {
        contentType = contentType || '';
        var sliceSize = 1024;
        var byteCharacters = atob(base64Data);
        var bytesLength = byteCharacters.length;
        var slicesCount = Math.ceil(bytesLength / sliceSize);
        var byteArrays = new Array(slicesCount);

        for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
            var begin = sliceIndex * sliceSize;
            var end = Math.min(begin + sliceSize, bytesLength);

            var bytes = new Array(end - begin);
            for (var offset = begin, i = 0 ; offset < end; ++i, ++offset) {
                bytes[i] = byteCharacters[offset].charCodeAt(0);
            }
            byteArrays[sliceIndex] = new Uint8Array(bytes);
        }
        return new Blob(byteArrays, { type: contentType });
    }

任何帮助?

5 个答案:

答案 0 :(得分:4)

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

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]

使用list comprehension字符串为split starting from right 1次仅使用'-'作为分隔符,并拾取第一个字符串并将其解析为整数。

答案 1 :(得分:3)

使用正则表达式:

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]

答案 2 :(得分:2)

str.replace不在原位。它返回一个包含替换字符的新字符串。因此:

for i in x:
    string.replace(str(i),"-",' ')

不会影响x中的字符串。

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

相反,你应该做的是:

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返回一个新字符串:

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

答案 3 :(得分:2)

id喜欢使用e正则表达式。只需查看here并使用this撰写正则表达式

import re

x=[u'9-9', u'-5-5',u'-45-45',u'99-99']
rexp = '(.*)-\d+'
c = re.compile(rexp)
for i in x:
    print(int(c.search(i).groups()[0]))

答案 4 :(得分:2)

import re 

[int(re.sub(r"(-\d+$)", r"", i)) for i in x]
#[9, -5, -45, 99]