3

皆さん、こんにちは。python での並べ替えと並べ替え関数の作成について助けが必要です。文字列項目insert_in_orderのリストと文字列項目受け取る関数を作成しようとしています。アイテムがすでにアルファベット順にソートされており、アイテムをアイテムの正しい位置に挿入する必要があると仮定して、これを実行しようとしています

また

私が直面している同じ問題に関して、リスト項目と文字列項目removeを取る関数も修正したいと思います。この関数は、items内のitemの最初の出現を削除する必要があります。また、itemがitemsにまったく出現しない場合、関数は item を変更しないままにしておく必要があります

編集:

私の元の関数セットは次のとおりです

def read_list(fname):
    items = []
    with open(fname, 'r') as fin:
        for line in fin:
            items = insert_in_order(items, line[:-1])

    return items


def write_list(items, fname):
    fout = open(fname, 'w')
    for item in items:
        fout.write(item + '\n')
    fout.close()

また、これらの機能をテストすることになっているテストファイルもあります。

class TestLabThre(unittest.TestCase):
    def test_read_list(self):
        self.assertEqual(
                read_list('lab06ReadTest.txt'),
                ['a', 'b', 'c', 'd', 'e'])

def test_write_list(self):
    write_list(['a', 'b', 'c', 'd', 'e'], 'lab06WriteTest.txt')
    in_file = open('lab06WriteTest.txt', 'r')
    self.assertEqual(in_file.read(), 'a\nb\nc\nd\ne\n')

myinsert_in_orderおよびremovefunctions は、テストを実行すると合格するように関数に追加されることになっています。しかし、毎回「失敗したテスト」が表示されます。

私は本当に混乱しており、正しい方向に私を向ける助けをいただければ幸いです。

4

3 に答える 3

3

bisect.insort_leftを使用してアイテムxをリストに挿入し、ソートされているaと仮定してソートしたままにしaます。

list.removeを使用して、最初に出現した値をリストから削除します。値がリストにない場合、この関数は ValueError を発生させます。したがって、例外を処理するには、呼び出しを a でラップする必要がありますtry..except。例については、以下を参照してください。


import bisect

cheese = sorted('manchego stilton brie gouda'.split())
print(cheese)
# ['brie', 'gouda', 'manchego', 'stilton']

item = 'gorgonzola'
bisect.insort_left(cheese, item)
print(cheese)
# ['brie', 'gorgonzola', 'gouda', 'manchego', 'stilton']

try:    
    cheese.remove('manchego')
except ValueError: 
    pass
print(cheese)
# ['brie', 'gorgonzola', 'gouda', 'stilton']
于 2013-04-06T21:09:16.513 に答える