我有以下代码,我们的想法是能够为root
中的每个字符串迭代some_list[j]
。目标是远离嵌套for循环并学习更多pythonic方法。我想为value
中的第一项返回some_list
,然后重复some_list
中的下一项。
for i, value in enumerate(root.iter('{0}'.format(some_list[j])))
return value
有什么想法吗?
编辑:root是
tree = ElementTree.parse(self._file)
root = tree.getroot()
答案 0 :(得分: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
中的每个项目运行一次内部代码。
答案 1 :(得分: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]
答案 2 :(得分: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