【问题标题】:Sorting a list of the list with loop使用循环对列表进行排序
【发布时间】:2018-01-31 16:18:53
【问题描述】:
import io
f = io.StringIO('''130,266.07
46,174.14
169,187.01
179,488.69
53,401.53
128,106.88
97,398.33
152,493.87
20,205.43
94,248.14''')
x=0
y=0
for line in f:
    x +=1
alist=x*[0]
for i in range(x):
    alist[i]=[]
f.close()
g= io.StringIO('''130,266.07
46,174.14
169,187.01
179,488.69
53,401.53
128,106.88
97,398.33
152,493.87
20,205.43
94,248.14''')
for line in g:
    s=line.split(",")
    alist[y].append(int(s[0]))
    alist[y].append(float(s[1]))
    y +=1
def printlist():
    h=0
    while h <x  :
        blist=alist[h]
        h += 1
        print(str(blist[0])+" Kms, "+",$"+str(blist[1]))
for index in range(x):
    value=alist[index]
    j = index-1
    while j>=0:
        if value < alist[j]:
            alist[j+1] = alist[j]
            alist[j] = value
            j -= 1
        else:
            break
printlist()

问题是输入值类似于[[a, b], [c, d], ...],现在它会根据第一个元素(例如ac)而不是第二个元素(@987654325)对其进行排序@ 和 d) 我需要按 _the 第二个值对其进行排序。如果每个列表,输出将不是关于第一个元素的排序数据,但是我需要对每个列表的第二个值进行排序,这也是一个浮点数,不能与整数进行比较。谢谢

【问题讨论】:

  • 您能否为此输入提供所需的输出?
  • 这是python2吗?因为否则比较列表会抛出错误。
  • 我正在寻找按第二个元素排序的输出,但我得到的是按第一个元素排序的。
  • 不,我使用的是 python 3.5
  • 我可以建议:sorted(a_list,key = lambda x:x[1]) 吗?

标签: python list sorting linked-list


【解决方案1】:

正如我在 cmets 中首次建议的那样,您正在比较列表,因此对列表使用自然比较:

if value < alist[j]:

这会比较第一个元素,如果第一个元素相等(如果有第二个元素)则比较秒,依此类推。

您只需要与子列表的第二个元素进行比较,而不考虑第一个:

if value[1] < alist[j][1]:

如果您想要在值相等的情况下进行决胜局,请考虑比较 反转 列表:

if value[::-1] < alist[j][::-1]:

当然,归根结底,没有什么比 python 内置排序更好的了:

sorted(a_list,key = lambda x:x[1])

有决胜局:

sorted(a_list,key = lambda x:x[::-1])

无论如何,输出,似乎按成本排序已经奏效了:

128 Kms, ,$106.88
46 Kms, ,$174.14
169 Kms, ,$187.01
20 Kms, ,$205.43
94 Kms, ,$248.14
130 Kms, ,$266.07
97 Kms, ,$398.33
53 Kms, ,$401.53
179 Kms, ,$488.69
152 Kms, ,$493.87

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 2011-09-30
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2021-12-10
    • 2018-07-29
    相关资源
    最近更新 更多