5

次のようなリストがあります。

['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]
4

6 に答える 6

0

遅くなりましたが、ここにしましょう:

def strip(xs, predicate=lambda x: not x):
    """Given a sequence, remove leading/trailing items that match the predicate."""
    m = [bool(predicate(x)) for x in xs]
    try:
        a = m.index(False)
        b = m[::-1].index(False)
        return xs[a:len(xs)-b]
    except ValueError:
        return []


print strip(['','',1,2,'',3,4,0,None,'',''])        # [1, 2, '', 3, 4]
print strip([1,2,10,20,3,30,5,6], lambda x: x < 10) # [10, 20, 3, 30]
print strip([10,20,3,30], lambda x: x < 10)         # [10, 20, 3, 30]
print strip([1,2,3], lambda x: x < 10)              # []
于 2013-04-20T13:33:58.100 に答える