有没有更符合 Python 风格的方法来填充这个列表?

4

我想要从Django查询中清理字符串,以便可以在Latex中使用

items = []
items_to_clean = items.objects.get.all().values()
for dic in items_to_clean:
    items.append(dicttolatex(dic))

这是我解决这个任务的标准方法。是否可以通过列表推导式来解决这个问题?因为 dicttolatex 是返回字典的函数。


1
“dicttolatex” 是一个字典,不清楚为什么你不能使用列表推导式来代替你的“标准方法”。 - juanchopanza
1
如果你有一个 items = [],那么 items.objects 是什么? - user2357112
2个回答

8
您可以通过使用列表推导式来避免重复调用 append
items = [dicttolatex(dic) for dic in items_to_clean]

哦,我把它们都搞混了 - items = [dictolatex(item) for item in items_to_clean] - 谢谢你为我写出来。 - Maximilian Kindshofer

5

您可以使用map而不必重复发明轮子。

示例:

lst=[1,2,3,4]
def add(n):
    return n+n

a=[]
a.extend( map(add,lst))
print a

输出:

[2, 4, 6, 8]

这是针对您的情况而言:
items_to_clean = items.objects.get.all().values()
items = map(dicttolatex,items_to_clean)

这个看起来也不错,但我会坚持使用juanchopanza的方法,因为它可以在一行代码中创建列表和值。 - Maximilian Kindshofer
2
@MaximilianKindshofer map 函数也可以在一行中创建包含值的列表。这样甚至更短... items = map(dicttolatex, items_to_clean) - Jakube
2
如果你在创建列表,那么哪种方法更好这个问题基本上是一个主观的判断。列表推导式中使用的生成器表达式可以在不需要构建列表时用于不同的环境中。另请参见https://dev59.com/mHM_5IYBdhLWcg3wvV5w。就个人而言,我习惯于使用列表推导式,并且一直在使用它们,但 map 看起来更易读,更容易在源代码中进行搜索。 - juanchopanza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接