【问题标题】:python - set value with if statement [closed]python - 使用if语句设置值[关闭]
【发布时间】:2016-07-19 13:29:42
【问题描述】:

我有一个图表,其中一些行没有值。我希望它采用前一行的值。如下所示:

for index, item in enumerate(df4.Settle):
    if (item == 'No value'):
        item = item[index-1] #<--I want to do this

怎么做?

【问题讨论】:

  • 您的代码是否有效?
  • 您只需发布一些代码并说“我执行以下操作...怎么做?”
  • 您需要将item[index-1] 替换为df4.Settle[index-1],但如果您连续使用两次'No value',这将不起作用。
  • @S4M 这将是因为他在浏览列表时正在更新“无价值”
  • @Dashiell 不,不会,因为他正在处理的枚举在循环内是不可变的。

标签: python arrays indexing


【解决方案1】:

我不完全明白你想做什么。您提供的示例没有多大意义,因为

>> item == 'no value'  # that's your condition
>> item[index-1] in 'no value' # item[index-1] in 'no value'  
True                           # will be true for any valid int

但我认为你想要这样的东西:

>>> lst = [[1,2,3], 'No value', [0,0,0]]
>>> for index, item in enumerate(lst):
...   if item == 'No value':
...     lst[index] = lst[index-1]
... 
>>> lst
[[1, 2, 3], [1, 2, 3], [0, 0, 0]]

【讨论】:

    【解决方案2】:

    这是第三行中的一个简单错误。您的代码应该改为阅读

    for index, item in enumerate(df4.Settle):
      if (item == 'No value'):
        item = df4.Settle[index-1]
    

    最初您从“无值”一词中获取一个字符,而现在您将从数据表中获取值。我应该指出,如果您的第一个值为“无值”,这将导致错误。

    【讨论】:

    • 这行不通,因为您将项目分配给一个新变量,但您实际上从未将其作为列表的一部分 :)
    • @joaquinlpereyra OP 从未说过他想更改列表。
    • '我有一个图表,其中一些行没有值。我希望它取上一行的值。 ' 我假设 'it' 必须指由行组成的图表。
    • @joaquinlpereyra 这并不一定意味着他想更改列表。也许他只是想改变item 变量的值并用它做一些其他的事情。
    • 您的解释很有道理。无论如何,我们会让 OP 决定他想做什么 :)
    【解决方案3】:

    有一个特殊的NoneType 及其唯一的实例None 来表示python 中的空值。 此外,不清楚您想对 chart 事物中的各个值做什么。 所以假设你想使用None而不是你的字符串'No value'来迭代它们:

    def yield_or_previous(iterable):
        last_item = None
    
        for item in iterable:
    
            if item is not None:
                last_item = item
                yield item
            else:
                if last_item is not None:
                    yield last_item
                else:
                    # TODO: What shall be done if first item is None?
                    # Raise an exception?
                    #raise ValueError('First item must not be none')
                    # or pass?
                    pass
    
    # Call it
    for item in yield_or_previous(df4.Settle):
        # Do whatever
        print(item)
    

    【讨论】:

      猜你喜欢
      • 2018-02-22
      • 1970-01-01
      • 2012-06-06
      • 2018-08-25
      • 1970-01-01
      • 2021-09-14
      • 2017-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多