美好的一天大家, 我需要排序和編寫python排序功能的幫助。我正在嘗試編寫一個函數insert_in_order
,其中包含字符串項目和字符串項目的列表。我試圖做到這一點假設項目已經排序的字母順序,我必須在問候插入項目到正確的位置在項目在Python中排序項目
而且
同樣的問題我是面對,我也想要一個功能remove
它需要一個列表項目和字符串項目。此功能應刪除項目的第一個出現項目項目。此外,如果項目完全沒有發生在項目中,則該功能應保留項目不變。
編輯:
我原來的功能集如下
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')
我insert_in_order
和remove
功能應該被添加到功能,所以當我運行我的測試,他們通過。但我每次都會收到一個「失敗的測試」。
我真的很困惑,任何幫助指出我在正確的方向將不勝感激。
爲什麼不使用'bisect.bisect_left'來查找項目的位置,然後使用'list.pop'來刪除它。這會搜索'log(n)',而不是'O(n)'? – ovgolovin 2013-04-06 21:15:13
[從Python列表中刪除項目是O(n)](http://wiki.python.org/moin/TimeComplexity),所以無論我們使用list.pop還是list.remove,我們仍然是O (N)。 – unutbu 2013-04-06 21:17:56
是的。但那爲什麼要使用'bisect'呢? – ovgolovin 2013-04-06 21:19:01