我如何更简洁地写下以下内容?
genres = ','.join([item for item in list((sheet.cell(n,18).value,
sheet.cell(n,19).value, sheet.cell(n,20).value)) if item])
答案 0 :(得分:6)
','.join(filter(None, (sheet.cell(n, i).value for i in (18, 19, 20))))
(sheet.cell(n, i).value for i in (18, 19, 20))
是替换list(…)
部分的generator expression。您可以用范围或其他内容替换元组(18, 19, 20)
。
filter(None, iterable)
is equivalent to (x for x in iterable if x)
。 (在Python 2.x中,您可能希望使用itertools.ifilter。)
另请注意,您可以使用
创建列表[sheet.cell(n,18).value, sheet.cell(n,19).value, sheet.cell(n,20).value]
而不是更长的list((sheet.cell(n,18).value, …))
。
答案 1 :(得分:6)
两行。可读性胜过简洁。
你的列表理解也是不必要的,一个genexp就可以了。
genre_values = (sheet.cell(n, i).value for i in xrange(18, 21))
genres = ", ".join(value for value in genre_cells if value)