gpt4 book ai didi

python - 在python中排序项目

转载 作者:太空宇宙 更新时间:2023-11-03 15:20:28 25 4
gpt4 key购买 nike

大家好, 我需要有关排序和用 python 编写排序函数的帮助。我正在尝试编写一个函数 insert_in_order,它接受一个字符串列表 items 和一个字符串 item。我正在尝试这样做,假设 items 已经按字母顺序排序,我必须将 item 插入到 items 中的正确位置。 p>

还有

关于我面临的同样问题,我还想纠正一个函数remove,它接受一个列表items 和一个字符串item。此函数应删除 items 中第一次出现的 item。此外,如果 item 根本没有出现在 items 中,则函数应该保持 items 不变。

编辑:

我原来的一套函数如下

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_orderremove 函数应该添加到函数中,这样当我运行测试时,它们就会通过。但我每次都得到一个“失败的测试”。

我真的很困惑,任何帮助我指明正确方向的人都将不胜感激。

最佳答案

使用bisect.insort_left将项目 x 插入到列表 a 中,并假设 a 已排序并保持排序。

使用list.remove从列表中删除第一次出现的值。如果该值不在列表中,此函数将引发 ValueError。因此,您需要将调用包装在 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']

关于python - 在python中排序项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15856017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com