我有一个如下所示的列表:
['a', 'b', 'c', '', '', '']
这是解析'脏'csv文件的结果.我现在想要摆脱右边的空列.我不能只使用计数,因为长度是可变的.我也不能只使用简单的过滤,因为还有一些行如下所示:
['a1', '', 'c1', '', '']
所以我必须保留不正确的空列.这是否有惯用的方法?我希望能在"反向列表"中应用类似"removeWhile"的功能.
到目前为止,我提出的最好的是以下内容:
def filterRow(row):
row.reverse()
blanks = 0
for x in row:
if x == '':
blanks += 1
else:
break
row.reverse()
return row[0:-blanks]
Run Code Online (Sandbox Code Playgroud)
def filterRow(row):
while row[-1] == "":
row.pop()
Run Code Online (Sandbox Code Playgroud)
如果你不想出于某种原因就地进行,请改为:
def filterRow(row):
row = list(row)
while row[-1] == "":
row.pop()
return row
Run Code Online (Sandbox Code Playgroud)
弹出列表末尾的速度非常快,虽然计算最后一个索引并执行切片可能会稍微快一点,但也会导致更长,更复杂和更难读取的代码.因此,暂时使用可读版本,并且只有在确定它是实践中的重大瓶颈时才考虑更改它.
为了使函数更直观,为什么不调用它rstrip而不是filterRow,因为它对str.rstrip字符串几乎完全相同?
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |