排序文本文档python 3

时间:2014-10-12 23:40:00

标签: python-3.x

这是文本文档:第一个字符串是金属类型,第二个是金属条的数量,第三个是重量,第四个是值。

Gold 1 5 750

Silver 1 1 400

Rhodium 1 4 500

Platinum 1 6 1000

我必须使用插入排序按值对此列表进行排序。这是我到目前为止所拥有的

def sortMetalsByValuePerBar(metals):
    for i in range(1,len(metals)):
        j = i
        while j > 0 and metals[j-1] > metals[j]:
            metals[j - 1], metals[j] = metals[j], metals[j - 1]
            j -= 1
    return metals

这是对的吗?

1 个答案:

答案 0 :(得分:1)

尝试从这个解决方案中学习。

data="""
Gold 1 5 750
Silver 1 1 400
Rhodium 1 4 500
Platinum 1 6 1000
"""

data = filter(None, data.splitlines())
data = [l.split() for l in data]
data = [ (l[0], int(l[1]), int(l[2]), int(l[3])) for l in data ]

def insertion_sort(l, keyfunc=lambda i:i):
    for i in range(1, len(l)):
        j = i-1
        key = l[i]
        while keyfunc(l[j]) > keyfunc(key) and (j >= 0):
            l[j+1] = l[j]
            j -= 1
        l[j+1] = key

insertion_sort(data, keyfunc=lambda l: l[3])

for l in data:
    print(l)

# Output:
# ('Silver', 1, 1, 400)
# ('Rhodium', 1, 4, 500)
# ('Gold', 1, 5, 750)
# ('Platinum', 1, 6, 1000)