0

本当にここで立ち往生していて、アドバイスが必要です....

私はリストを持っています...

transposedlist = [('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('-', '*', '*', '*'), ('1', '3', '3', '*'), ('-', ' ', ' ', '*'), 

上記の転置リストの各グループは、行列の列を表します。

番号を含まないグループを削除したいと思います。

これまでの私の試みはここにあります...

for i, group in enumerate(Listoflists):
    if "-" in group[1:] == group[:-1] or "*" in group[1:] == group[:-1] or group[1:] None == group[:1]:
        Matrix.DeleteColumn(i)

最初のアイテムのチェックの上のコードは、グループの最後のアイテムと同じです。そうであれば、列を削除する必要があります。これは、中間のアイテムを無視するため、明らかに理想的ではありません。

助言がありますか?

4

3 に答える 3

0

リスト内包表記を試してください:

>>> transposedlist = [('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('-', '*', '*', '*'), ('1', '3', '3', '*'), ('-', ' ', ' ', '*')]
>>> newlist = [x for x in transposedlist if any(y.isdigit() for y in x)]   
>>> newlist
[('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('1', '3', '3', '*')]
>>>

詳細を読みたい場合は、anyおよびに関する参考文献を以下に示します。str.isdigit

于 2013-10-25T16:12:03.413 に答える
0

リスト内包表記でany()関数を使用して、代わりに数字でエントリを保持します。

transposedlist = [entry for entry in transposedlist if any(e.isdigit() for e in entry)]

ここでのany()関数Trueは、 iterable (ここではジェネレーター式) に値がある場合に戻りTrue、そうでない場合に戻りますFalse。式(e.isdigit() for e in entry)が生成するだけの場合、Falseそれentryは新しいリストに含まれません。

デモ:

>>> transposedlist = [('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('-', '*', '*', '*'), ('1', '3', '3', '*'), ('-', ' ', ' ', '*')]
>>> any(e.isdigit() for e in transposedlist[0])
True
>>> any(e.isdigit() for e in transposedlist[3])
False
>>> [entry for entry in transposedlist if any(e.isdigit() for e in entry)]
[('-', '*', '*', '1'), ('7', '6', '6', '1'), ('-', '*', '1', '*'), ('1', '3', '3', '*')]
于 2013-10-25T16:12:08.880 に答える