【问题标题】:How to refer to the next reference in a for loop?如何在 for 循环中引用下一个引用?
【发布时间】:2018-11-26 08:17:20
【问题描述】:

您好,我正在尝试找出我遇到的这个问题,例如

我输入“123”我得到 [1,2,3] 但问题是当我输入时 “1-23”我想得到[1,-2,3]

我不知道如何制作它,以便当它识别出有负面影响时 它会使下一个为负数(将其乘以一)

如果我删除第一个,因为它只适用于正面

这是我的代码(对不起,我是 python 初学者)

listy = []
for i in a:
    i + 1 = i * -1
for i in a:
    listy.append(i)

【问题讨论】:

  • i + 1 = i * -1 在 Python 中是非法的。请添加一个完整的示例。
  • 如何获取或定义a?我看到答案假设它是一个输入字符串,但我想澄清一下。
  • @DYZ:OP 说他们是初学者;就他们的能力而言,这很可能是一个完整的例子。友善 :) 我们要求人们积极主动并尽力而为,但不一定是正确的。
  • @timgeb:不,问题不是跳过,而是修改迭代器的未来元素(这是一个 XY 问题)。

标签: python


【解决方案1】:

正则表达式可用于提取单个数字 ("\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]

【讨论】:

    【解决方案2】:

    你不能按照你想象的方式去做。一种方法是记住这个标志,并在重要时应用它:

    a = "1-23"
    listy = []
    sign = 1
    for i in a:
        if i == "-":
            sign = -1
        else:
            listy.append(int(i) * sign)
            sign = 1
    

    另一个是使用正则表达式来帮助您解析字符串编辑:正如 DYZ 的回答中所展示的那样:)

    【讨论】:

      【解决方案3】:

      您可以使用标志来检查负数。

      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】:

        假设您不想要正则表达式解决方案,这里有一个使用 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(iterator, None),我们跳过了数组中的 1 个元素

        此外,字符被转换为ints。如果您愿意,可以将它们转换回str

        【讨论】:

          【解决方案5】:

          设置条件标志以跟踪前一个字符是否为'-':

          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)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-24
            • 1970-01-01
            • 1970-01-01
            • 2015-09-15
            • 2019-10-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多