【发布时间】:2012-10-30 17:05:57
【问题描述】:
我正在学习 Python,但我不明白如何使用迭代器。
我需要编写代码。在 C 中它会是这样的:
list_node *cp = list_of_chars;
char dp = '>'; int flag = 0;
while (cp != NULL)
{ if( isdigit(cp->val) )
{ printf("%c",cp->val);
if( cp->val == '0' )
{ cp->prev->next = cp->next; cp->next->prev = cp->prev; }
else cp->val--;
}
else if( (cp->val == '>') || (cp->val == '<') )
{ dp = cp->val; flag = 1; }
if( dp == '>' ) cp = cp->next;
else if( dp == '<' ) cp = cp->prev;
else return ERR;
if( flag && ( (cp->val == '>') || (cp->val == '<') ))
{ cp->prev->prev->next = cp;
cp->prev = cp->prev->prev;
}
}
你能帮我把这段代码翻译成python吗?我开始写,但有一些错误,我不确定我是否理解文档。
ip = {'cp' : iter(program), 'dp' : '>'}
flag = 0
while ip['cp'] != []:
if ('0' <= ip['cp']) & (ip['cp'] <= '9'):
print ip['cp']
if ip['cp'] == '0': ip['cp'] = []
else: ip['cp'] -= 1
elif (ip['cp'] == '>') | (ip['cp'] == '<'):
ip['dp'] = ip.['cp']
flag = 1
else: raise NameError('incorrect cp-value')
if ip['dp'] == '>': ip['cp'].next()
elif ip['dp'] == '<': ip['cp'].prev()
else: raise NameError('incorrect dp-value')
if flag & ( (ip['cp'] == '>') | (ip['cp'] == '<') ):
ip['cp'].prev()
ip['cp'] = []
问题是如何在没有函数 next() 的情况下获取迭代器的值。
具有高级迭代器使用的 python 专家代码示例也很高兴看到。
【问题讨论】:
-
试图将 C 直接翻译成 Python 是一个糟糕的主意。您需要翻译概念,而不是代码。 Python 是一种更高级别的语言,它以 C 语言的方式做事,而在 Python 中,会产生可怕的、非 Python 的代码。
-
我知道 C-prog.lang。并考虑一下。我试着向你解释我需要什么,并使用 C 语言。我无法用另一种方式解释算法。
-
@so-olitary 那么你的问题是你不能很好地定义问题。你需要给我们一个确切的问题。你在这里说它不起作用 - 这不够具体。你得到什么错误?有什么问题?
-
您的 C 代码中似乎缺少 NULL 检查(当您从列表中删除节点时,请推进指针)。能否提供an example input such as
234<5>6and the expected output e.g.,234321。flag只设置一次是否正确?不应该在循环内的某个点设置为零吗? -
@J.F.塞巴斯蒂安 是的,我有所有的缺点。但是我没有为编译器编写代码。我试图解释算法。感谢您的更正和您的 python-code 示例。
标签: python string list iteration