-2
class Sample:

    def __init__(self):
        self.lst_report_footer_strings = ['Manager', 'Accountant', 'Created By', 
                                         'fifth', '', '']
        int_size_of_string = 0
        lst_temp_report_footer = self.lst_report_footer_strings
        for lst_report_footer_item in self.lst_report_footer_strings:
            print lst_temp_report_footer
            print lst_report_footer_item
            if lst_report_footer_item in ('', ' '):
                print "Inside if : Item ==" + lst_report_footer_item
                lst_temp_report_footer.remove(lst_report_footer_item)   
                print "list after remove == " + str(lst_temp_report_footer)
            else:
                print "Inside else : length = ", str(len(lst_report_footer_item))
                int_size_of_string += len(lst_report_footer_item)


if __name__ == '__main__':
    ins_class = Sample()

出力

['Manager', 'Accountant', 'Created By', 'fifth', '', '']
Manager
Inside else : length =  7
['Manager', 'Accountant', 'Created By', 'fifth', '', '']
Accountant
Inside else : length =  10
['Manager', 'Accountant', 'Created By', 'fifth', '', '']
Created By
Inside else : length =  10
['Manager', 'Accountant', 'Created By', 'fifth', '', '']
fifth
Inside else : length =  5
['Manager', 'Accountant', 'Created By', 'fifth', '', '']

Inside if : Item ==
list after remove == ['Manager', 'Accountant', 'Created By', 'fifth', '']

私が必要なのは....

list after remove == ['Manager', 'Accountant', 'Created By', 'fifth']
4

3 に答える 3

1

これは、クラスと同等であり、デバッグ出力がなく、変数名が短縮されています。

class Sample:
   def __init__(self):
       self.footers = ['Manager', 'Accountant', 'Created By', 'fifth', '', '']
       self.footers = [x for x in self.footers if x.strip() != ""]
       self.int_size_of_string = sum(len(x) for x in self.footers)

if __name__ == '__main__':
    myclass = Sample()
    print myclass.footers
    print myclass.int_size_of_string

int_size_of_string属性も作成しました。そうしないと、__init__完了するとアクセスできないためです ( から値を返すことはできません__init__)。このstripメソッドは、文字列の両端から任意の数のスペースおよびその他の空白文字を削除します。

コードが機能しなかった理由は、リストを繰り返し処理しているときにリストを変更していたためです。最後から 2 番目のアイテムを削除したため、最後のアイテムがその代わりになり、次のアイテムに移動したときにアイテムが残っていませんでした。

于 2012-08-01T10:54:16.953 に答える
1

これをもっと単純なコードに変えて、あなたが本当にやろうとしていることを理解しようとしました。不必要なコードがたくさんありますが、なぜクラスを使用して問題を説明するのでしょうか?

>>> x=['Manager', 'Accountant', 'Created By', 'fifth', '', '']
>>> result = [i for i in x if i.strip()]
>>> result
['Manager', 'Accountant', 'Created By', 'fifth']
>>>
于 2012-08-01T10:54:28.820 に答える
0

さて、それが機能しない理由は、ループがリスト内の各アイテムを通過するためです。スペースが見つかると、そのアイテムを削除します。現在のリストを表示します。初めて、2つあるのでスペースが表示されます。

しかし、ループ内でリストを変更したため、ループが失敗しました。6つのうち5つ目のアイテムにいて、リスト5を削除したため、反復するアイテムがなくなりました。アイテムは5つしか含まれていませんが、ループはアイテム6を探します。アイテムがないため、終了します。リストはそのままにしておきます。

基本的に、あなたがすべきことは次のとおりです。

class Sample:
   def __init__(self):
       self.lst_report_footer_strings = \
['Manager', 'Accountant', 'Created By', 'fifth', '', '']
       int_size_of_string = 0
       lst_temp_report_footer = self.lst_report_footer_strings
       temp_remove_list = []
       for lst_report_footer_item in xrange(len(self.lst_report_footer_strings)):
           print lst_temp_report_footer
           print self.lst_report_footer_strings[lst_report_footer_item]
           if lst_temp_report_footer[lst_report_footer_item] in ['',' ']:
               print "Inside if : Item =="+self.lst_report_footer_strings[lst_report_footer_item]
               temp_remove_list.append(lst_report_footer_item)   
           else:
               print "Inside else : length = ",str(len(lst_temp_report_footer[lst_report_footer_item]))
               int_size_of_string += len(lst_temp_report_footer[lst_report_footer_item])

       for item in reversed(temp_remove_list):
           del lst_temp_report_footer[item]

       print "final list : == ",lst_temp_report_footer

if __name__ == '__main__':
    ins_class = Sample()

注-このファイルのタブには奇妙なことがありました。うまくいくことを願っています。

于 2012-08-01T11:01:07.597 に答える