我将如何更简洁地编写以下内容?
genres = ','.join([item for item in list((sheet.cell(n,18).value,
sheet.cell(n,19).value, sheet.cell(n,20).value)) if item])
我将如何更简洁地编写以下内容?
genres = ','.join([item for item in list((sheet.cell(n,18).value,
sheet.cell(n,19).value, sheet.cell(n,20).value)) if item])
','.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(…)
。您可以将元组替换(18, 19, 20)
为范围或其他内容。
filter(None, iterable)
相当于 (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, …))
。
在两条线上。可读性胜过简洁性。
你的列表理解也是不必要的,一个 genexp 就可以了。
genre_values = (sheet.cell(n, i).value for i in xrange(18, 21))
genres = ", ".join(value for value in genre_cells if value)