考虑以下假设情况。
作为您在python中开发的应用程序的一部分,您必须格式化对象列表并将每个后续项分配给提供的关键字作为元组。以下是语法:
entries = [keyword, [obj1, obj2, obj3, ...]] # Original list of object entries
formatted = [(keyword, obj1), (keyword, obj2), (keyword, obj3), ...]
这里是您提出的函数(如果有更高效的方法,请告诉我):
def format(keyword, entries):
return [(keyword, x) for x in entries[1][0]]
这是应用该函数的示例:
foo = format(entries[0], entries[1])
灵活性问题
注意,在format
函数中,entries
变量具有静态索引整数1
和0
。假设您预计可能会将新术语附加到entries
列表中。您会通常使用索引变量而不是常量(对于稍后将进入列表的项目,您可以期望增加常量),如果使用索引变量,您会使用本地或全局索引吗?您如何在代码中考虑此类灵活性?
namedtuple
或一个class
。 - satoruformat
一开始就只接受一个参数(然后在内部进行拆分),这样你就可以直接使用foo = format(entries)
。或者,另一种方式是foo = format(*entries)
。不过,如果没有看到更多的基础设施,很难确定最终代码的清晰度如何。 - abarnertitertools.izip_longest
可以实现format
--list(itertools.izip_longest([],['foo','bar','baz'],fillvalue='keyword'))
-- 大多数情况下您甚至不需要一个列表对象,可迭代对象也很好用 :) - mgilsonformat()
,我认为你的意思是return [(keyword, x) for x in entries]
。 - martineauentries
是一个全局变量和一个函数参数,在函数中会使用该参数。 - martineau