如何在for循环中参考下一个参考?

时间:2018-11-26 08:17:21

标签: python

嗨,我试图找出这个问题,例如我在哪里

我输入“ 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)

5 个答案:

答案 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