0

我有以下代码,其想法是能够rootsome_list[j]. 目标是远离嵌套的 for 循环,并学习一种更 Python 的方式来执行此操作。我想value为中的第一项返回每个,some_list然后为中的下一项重复some_list

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

有任何想法吗?

编辑:根是

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

3 回答 3

1

认为你想要做的是:

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):
    # ...

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


无论如何,这里没有嵌套循环。有两个循环,但它们只是交错的——你仍然只为some_list.

于 2013-08-08T21:21:43.000 回答
0

那么,给定包含多个列表的列表 A,您想返回每个列表的第一个元素吗?我可能没有正确理解你,但如果是这样,你可以使用列表理解......非常“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]
于 2013-08-08T21:21:49.257 回答
0

您可以尝试chain()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
于 2013-08-08T21:51:18.950 回答