处理字符串格式循环的Pythonic方法

2024-04-23 20:21:36 发布

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

我有以下代码,其思想是能够对some_list[j]中的每个字符串在root上进行迭代。我们的目标是远离嵌套for循环,学习一种更具python风格的方法。我想为some_list中的第一项返回每个value,然后为some_list中的下一项重复。你知道吗

for i, value in enumerate(root.iter('{0}'.format(some_list[j])))
        return value

有什么想法吗?你知道吗

编辑:根是

tree = ElementTree.parse(self._file)
root = tree.getroot()

Tags: 方法字符串代码intree目标forvalue
3条回答

我想你想做的是:

values = ('{0}'.format(root.iter(item)) for item in some_list)
for i, value in enumerate(values):
    # ...

但实际上,'{0}'.format(foo)是愚蠢的;它只会做与str(foo)相同的事情,但更慢,更难理解。很可能您已经有了字符串,所以您真正需要的是:

values = (root.iter(item) for item in some_list)
for i, value in enumerate(values):
    # ...

您可以将它们合并到一行中,或者用map(root.iter, some_list)等替换genexpr,但这是基本思想。你知道吗


无论如何,这里没有嵌套循环。有两个循环,但它们只是交错的,对于some_list中的每个项目,仍然只运行一次内部代码。你知道吗

所以,给定一个包含多个列表的列表,您想返回每个列表的第一个元素吗?我可能没有正确理解你,但如果是这样,你可以使用列表理解…非常“Pythonic”;)

    In [1]: some_list = [[1,2,3],[4,5,6],[7,8,9]]

    In [2]: new = [x[0] for x in some_list]

    In [3]: new
    Out[3]: [1, 4, 7]

您可以尝试使用^{}itertools模块。它看起来像

from itertools import chain

all_items = chain(*[root.iter('{0}'.format(x) for x in some_list)])
for i, value in enumerate(all_items):
    return value # or yield i, value, or whatever you need to do with value

相关问题 更多 >