嗨,我试图找出这个问题,例如我在哪里
我输入“ 123”,我得到[1,2,3],但问题是当我输入 我想得到[1,-2,3]
我不知道该怎么做,以便当它识别出负面因素时 会使下一个为负(乘以1)
如果我删除第一个,则仅对肯定有效
这是我的代码(对不起,我是python初学者)
listy = []
for i in a:
i + 1 = i * -1
for i in a:
listy.append(i)
答案 0 :(得分:5)
正则表达式可用于提取单个数字("\d"
),并可选地以减号("-?"
)开头:
import re
[int(x) for x in re.findall("-?\d", "1-23")]
#[1, -2, 3]
[int(x) for x in re.findall("-?\d", "123")]
#[1, 2, 3]
答案 1 :(得分:1)
您无法按照自己的想象去做。一种方法是记住标志,并在重要时应用它:
a = "1-23"
listy = []
sign = 1
for i in a:
if i == "-":
sign = -1
else:
listy.append(int(i) * sign)
sign = 1
另一种方法是使用regexp来帮助您解析字符串EDIT:如DYZ的答案中所示:)
答案 2 :(得分:0)
设置条件标志以跟踪前一个字符是否为'-':
a = "1-23"
listy = []
negative = False
for i in a:
if i == '-':
negative = True
continue
if negative == True:
listy.append((int(i)*-1))
else:
listy.append(int(i))
negative = False
print(listy)
答案 3 :(得分:0)
您可以使用标记来检查负数。
listy = []
a = input("numbers: ")
neg_flag = False
for i in a:
if i == '-':
neg_flag = True
else:
if neg_flag:
listy.append("-"+i)
neg_flag = False
else:
listy.append(i)
print(listy)
答案 4 :(得分:0)
假设您不需要正则表达式解决方案,那么以下是使用iter()
s='1-23'
res = []
iterator = iter(range(len(s)))
for i in iterator:
if s[i] == '-':
res.append(-1*int(s[i+1]))
next(iterator, None)
else:
res.append(int(s[i]))
print(res)
# [1, -2, 3]
通过使用s[i+1]
,我们将转到数组中的“ next”元素。通过使用next(iterator, None)
,我们可以跳过数组中的1个元素
此外,字符被转换为ints
。您可以根据需要将它们投射回str
。