我想合并一些包含字符串的列表(相同长度)并在字符串之间添加空格。
输入是:
rows = [['foo', '', '', 'bar', ''],
['', 'bar', '', 'foo', '']]
结果是:
result = ['foo', 'bar', '' 'bar foo', '']
我目前有一个正常工作的代码:
def merge_rows(rows):
if len(rows) < 2:
return None
else:
rowSize = len(rows[0])
result = [u'' for _ in range(rowSize)]
for row in rows:
for i in range(rowSize):
if result[i] and row[i]:
result[i] = result[i] + ' ' + row[i]
elif result[i]:
continue
else:
result[i] = row[i]
return result
它有效,但必须有更好的方法。
答案 0 :(得分:2)
zip
列表然后使用join()
方法获取字符串:
>>> rows = [['foo', '', '', 'bar', ''],
... ['', 'bar', '', 'foo', ''],
... ['1', '2', '3', '4', '5']]
>>>
>>> [" ".join(i) for i in zip(*rows)]
['foo 1', ' bar 2', ' 3', 'bar foo 4', ' 5']
如果您不需要领先空格,可以使用strip()
或lstrip()
将其删除:
>>> [" ".join(i).strip() for i in zip(*rows)]
['foo 1', 'bar 2', '3', 'bar foo 4', '5']
答案 1 :(得分:1)
In [1]: rows = [['foo', '', '', 'bar', ''],
...: ['', 'bar', '', 'foo', '']]
In [2]: [' '.join(i).strip() for i in zip(*rows)]
Out[2]: ['foo', 'bar', '', 'bar foo', '']
没有参数的 .strip()
会删除string