2010-12-15 51 views
0

我正在使用其API编写一些软件的加载项。我需要做的是提取必要的数据。 我使用'FOR'去思考API类。每个对象都有属性:索引(从0),类型(Lin,Ptp和其他)和值。浏览对象列表时,我对两种类型的对象感兴趣 - 那些类型为“Lin”或“Ptp”的对象;这么几个条件应满足:迭代中的多个条件,Python

至于林类型:

  • 如果有一些PTP林前(可能还有其他类型的他们之间的其他物体,虽然),林得到PTP的值PTP ....林。
  • 如果在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]

+0

你的问题很难理解。发布一些代码将有所帮助。 – dheerosaur 2010-12-15 08:50:53

+0

还没有验证码。 – Maks 2010-12-15 08:52:16

+0

“对象获得自己的价值”是什么意思? – Johnsyweb 2010-12-15 09:20:22

回答

1

我建议你遍历你的对象等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     

或类似的东西...

2

因为我是一个Python的初学者,我的经验现在混合,我不能拿出适当的算法。

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

从你的伪代码中,Python应该会变得更加明显,任何技术难题都可能成为StackOverflow(例如)或者你的同事问的更具体的问题。

+0

这样做,你可以看到它在页面 – Maks 2010-12-15 09:08:18

+1

这甚至没有足够的细节。继续思考。 – 2010-12-15 10:29:06

0

我会使用一种叫做finite-state machine或FSM去虽然API对象。当您遇到不同类型和相关属性时,您可以存储有关FSM“状态”中所见内容的信息,这些信息也决定了发生或遇到下一个“事件”(您正在迭代的项目)时发生的情况。收集的信息可以根据需要输出(即,当达到一定的状态。

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