2016-06-23 6 views
2

Я хочу, чтобы преобразовать список строк в список чисел, но не повезловыберите номер из списка строки

моя строка как

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

я хочу, чтобы преобразовать его в:

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

Я попытался зациклиться в списке и заменить «-», используя string.replace('-','') в каждой строке в списке, чтобы удалить «-» и делить число на 2 шага, но строка содержит символ «-» replac е не работает

часть моего кода:

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 

любая помощь?

ответ

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 раз только с использованием '-' в качестве разделителя и первая строка подхватывается и обрабатывается как целое число ,

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 
+0

пожалуйста, добавить, как я мог бы разделить число на 2 части и удалите вторую части в be 9 - 5 - 45 - 99 –

+0

спасибо, я решил это :) –

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])) 
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
import re 

[int(re.sub(r"(-\d+$)", r"", i)) for i in x] 
#[9, -5, -45, 99] 
Смежные вопросы