写这个列表理解的更好方法是什么?

Der*_*ley 2 python list-comprehension

我正在解析一个没有分隔符但确实有字段开始和停止的特定索引的字符串.这是我的列表理解,从字符串生成一个列表:

field_breaks = [(0,2), (2,10), (10,13), (13, 21), (21, 32), (32, 43), (43, 51), (51, 54), (54, 55), (55, 57), (57, 61), (61, 63), (63, 113), (113, 163), (163, 213), (213, 238), (238, 240), (240, 250), (250, 300)]
s = '4100100297LICACTIVE  09-JUN-198131-DEC-2010P0         Y12490227WYVERN RESTAURANTS INC                            1351 HEALDSBURG AVE                                                                                 HEALDSBURG               CA95448     ROUND TABLE PIZZA                                 575 W COLLEGE AVE                                 STE 201                                           SANTA ROSA               CA95401               '
data = [s[x[0]:x[1]].strip() for x in field_breaks]
Run Code Online (Sandbox Code Playgroud)

关于如何改进这个的任何建议?

dan*_*n04 7

您可以field_breaks通过执行以下操作将列表减半:

field_breaks = [0, 2, 10, 13, 21, 32, 43, ..., 250, 300]
s = ...
data = [s[x[0]:x[1]].strip() for x in zip(field_breaks[:-1], field_breaks[1:])]
Run Code Online (Sandbox Code Playgroud)


Tom*_*cki 7

您可以使用元组解包来获得更清晰的代码:

data = [s[a:b].strip() for a,b in field_breaks]
Run Code Online (Sandbox Code Playgroud)

  • +1,这也可以与dan04的想法结合起来(可能使用[`itertools`文档中的`pairwise`)(http://docs.python.org/library/itertools.html)) (2认同)