在迭代中使用多个条件,Python

2024-10-05 12:25:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一些softwate编写一个附加组件,使用它的API。我需要做的是提取必要的数据。 我用'FOR'来思考API类。每个对象都有属性:索引(从0开始)、类型(Lin、Ptp等)和value。在查看对象列表时,我对两种类型的对象感兴趣—类型为“Lin”或“Ptp”;因此应满足以下几个条件:

关于Lin类型:

  • 如果在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]或{}或{},应该有其他3个条件


Tags: 数据对象api类型列表for属性object
3条回答

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

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

As i am a beginner in Python, my thoughs are mixed now and i cannot come up with appropriate algorithm.

如果你想想出一个合适的算法,那就退后一步。<强>忘记Python (C++,FORTRAN,LOGO,AWK等),并考虑你正在试图解决的问题。试着在纸上写些伪代码。在

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

我建议您对对象进行迭代,并记住Lin或{}类型的最后一次出现(无论它们是什么。。。:):

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                

或者类似的事情。。。在

相关问题 更多 >

    热门问题