【问题标题】:Multiple conditions inside iteration, Python迭代中的多个条件,Python
【发布时间】:2011-05-25 18:55:23
【问题描述】:

我正在使用它的 API 为一些软件编写插件。我需要做的是提取必要的数据。 我使用“FOR”来思考 API 类。每个对象都有属性:索引(从 0 开始)、类型(Lin、Ptp 和其他一些)和值。通过对象列表,我对两种类型的对象感兴趣 - 具有“Lin”或“Ptp”类型的对象;所以应该满足几个条件:

关于林型:

  • 如果在 Lin 之前有一些 Ptp(但它们之间可能还有其他类型的其他对象),Lin 会获取 Ptp 的值 [Ptp....Lin]。
  • 如果在 Lin 之前还有其他 Lin(不过,它们之间可能还有其他类型的其他对象),Lin 会获取先前最接近 Lin 的值 [Lin....Lin]。
  • 如果在 Lin 之前既没有 Lin 也没有 Ptp(但它们之间可能有其他类型的其他对象),Lin 的值是“0”[...Lin]。

对于Ptp类型,它总是有自己的值

由于我是 Python 的初学者,我现在的想法很复杂,我想不出合适的算法。

我在想它应该是这样的:

for object in obects:
   If object.type == Ptp:
     ...object gets its own value
   elif object.type == Lin:
     ...

这里根据[...Lin][Lin...Lin][Ptp...Lin]应该还有其他3个条件

【问题讨论】:

  • 你的问题很难理解。发布一些代码会有所帮助。
  • “对象获得自己的价值”是什么意思?
  • 存储在对象内部的值。我需要将其提取并保存为文件中的字符串
  • 您的伪代码没有提及文件,因此不完整。

标签: python iteration conditional-statements


【解决方案1】:

我会使用称为 finite-state machine 或 FSM 的东西来遍历 API 对象。当您遇到不同的类型和相关属性时,您可以存储有关在 FSM 的“状态”中看到的内容的信息,这也决定了下一个“事件”(您正在迭代的项目)发生或遇到时会发生什么。收集到的信息可以根据需要输出(即达到某个状态时)。

FSM 是一个相当简单的精益和编程概念(几乎可以用任何语言),对于这类问题非常有用。

【讨论】:

    【解决方案2】:

    由于我是 Python 的初学者,我现在的想法很复杂,我想不出合适的算法。

    如果您想提出一个合适的算法后退一步忘记 Python(C++、Fortran、Logo、Awk 等),想想你要解决的问题。尝试在纸上写一些伪代码。

    从您的伪代码中,Python 应该变得更加明显,任何技术困难都可以在 StackOverflow 上提出更具体的问题(例如)或询问您的同事。

    【讨论】:

    • 做到了,你可以在页面上看到它
    • 这还不够详细。继续思考。
    【解决方案3】:

    我建议您遍历您的对象,并记住最后一次出现的 LinPtp 类型(无论是什么...... :)):

    lastOccurrence = None
    for obj in objects:
        if obj.type not in ('PtP', 'Lin'):
            continue
    
        if obj.type == 'Lin':
            if lastOccurrence is not None:
                obj.value = lastOccurrence.value
            else:
                obj.value = "0"
    
        lastOccurrence = obj                
    

    或类似的东西......

    【讨论】:

      猜你喜欢
      • 2020-10-21
      • 2022-06-20
      • 2019-04-27
      • 2016-08-31
      • 1970-01-01
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多