假设我有一个长字符串S,它看起来像:
S = "A, 2001, 2003, 2005, A, 2002, A, 2003, 2004, 2005, 2006, A, 2001, 2002, A, 2001, 2006, 2004, A..."
使用Python,如何获得以下字符串:
"A, 2001, 2003, 2005, , A, 2002, , , , A, 2003, 2004, 2005, 2006, A, 2001, 2002, , , A, 2001, 2006, 2004, , A..."
我希望“列”(即逗号)的数量等于两个As之间出现的最大年数。
这里的动机是创建一个合理排序的CSV文件。
我想将其分解为一个列表然后循环,如果元素的长度小于4,则在每个元素中添加逗号。
答案 0 :(得分:1)
首先,将初始字符串拆分为元素,然后创建二维数组并计算最大长度。然后您可以在添加缺少的单元格时将它们合并。类似的东西:
S = "A, 2001, 2003, 2005, A, 2002, A, 2003, 2004, 2005, 2006, A, 2001, 2002, A, 2001, 2006, 2004"
elems = S.split(', ')
lines = []
line = []
length = 0
maxlength = 0
for elem in elems[1:]:
if 'A' == elem:
lines.append(line)
line = []
if length > maxlength:
maxlength = length
length = 0
else:
line.append(elem)
length += 1
lines.append(line)
for line in lines:
line.extend([''] * (maxlength - len(line)))
line.insert(0, 'A')
print ','.join(map(lambda x : ','.join(x), lines))
答案 1 :(得分:0)
由于我们不知道开头的最大长度,因此在没有临时存储的情况下你会受到很大压力而无法摆脱2次传球:
s = "A, 2001, 2003, 2005, A, 2002, A, 2003, 2004, 2005, 2006, A, 2001, 2002, A, 2001, 2006, 2004, A..."
parts = s.split('A,')
parts.pop(0) # first is empty
xlen = max([len(x.split(',')) for x in parts])
for x in parts:
have = x.count(',')
print "A, " + x + (", " * (xl - have - 1))
输出:
A, 2001, 2003, 2005, ,
A, 2002, , , ,
A, 2003, 2004, 2005, 2006,
A, 2001, 2002, , ,
A, 2001, 2006, 2004, A...,