如何对包含数字的字符串列表进行数字排序?

Posted

技术标签:

【中文标题】如何对包含数字的字符串列表进行数字排序?【英文标题】:How to numerically sort list of strings containing numbers? 【发布时间】:2019-01-02 19:15:10 【问题描述】:
f1 = open("leader")
lines = f1.readlines()
lines.sort(key=int, reverse=True)
f1.close()
print(lines)

使用外部文件值:

345345:player7
435:zo
345:name
23:hello
1231:football

这是对它们进行排序,以便整数而不是名称排序

【问题讨论】:

我还需要帮助来添加其他值而不删除外部文件中的所有内容 您需要使用代表追加的'a' 打开文件。 f1 = open("leader", 'a') 如果您可以发布单独的问题而不是将您的问题合并为一个问题,则最好。这样,它可以帮助人们回答您的问题,也可以帮助其他人至少寻找您的一个问题。请参阅How to Ask 和The perfect question。目前尚不清楚您是否在将数据放入数据结构、从文件读取数据、排序数据、插入数据(dicts 是无序的或 insertordersorted- 不是按数字)或您是否无法保存数据时遇到问题。 你最可能想要的是这个:How to create a highscore in python 【参考方案1】:

IIUC:

l = ['345345:player7',
'435:zo',
'345:name',
'23:hello',
'1231:football']

sorted(l, key=lambda x: int(x.split(':')[0]))

输出:

['23:hello', '345:name', '435:zo', '1231:football', '345345:player7']

【讨论】:

自从OP提到sorting the numbers后,排序时不需要将数字解析为int吗? 嗯,它似乎工作,但不执行数字排序,只是字典排序。例如,1231 应该出现在 435 之后。 对,它肯定不会抛出错误,但我认为 OP 想要@Jean-FrançoisFabre 的答案。 但是这不起作用,因为它必须从外部文件输出并输出:【参考方案2】:

排序键应该是:“拆分一次,转换为整数”。不转换为整数会失败,因为使用了字典比较,在这种情况下"10" < "2",不是你想要的。

l = ['345345:player7',
'435:zo',
'345:name',
'23:hello',
'1231:football']

result = sorted(l, key=lambda x: int(x.split(':',1)[0]))

结果:

['23:hello', '345:name', '435:zo', '1231:football', '345345:player7']

不处理数字相等的决胜局。需要一个稍微复杂的排序键(但仍然可行)。在这种情况下,删除lambda 并创建一个真正的函数,这样您就可以执行一次拆分并解包以仅将第一部分转换为整数:

def sortfunc(x):
    number,rest = x.split(':',1)
    return int(number),rest

result = sorted(l, key=sortfunc)

【讨论】:

【参考方案3】:

试试这个: (如果您仍在从文件中读取,这很有帮助)

with open('leader.txt', mode = 'r') as f1:
    data = f1.readlines()
# end with
keys = 
output = []
for s in data:
    num, value = s.split(sep=':')
    if keys.get(int(num), False):
        keys[int(num)].append(value)
    else:
        keys[int(num)] = [value]
for num in sorted(keys):
    for i in keys[num]:
        output.append((num, i))
for num, value in output:
    print(f'num: value')

【讨论】:

我认为你的num, value = int(s.split(sep=':')) 会抛出错误 如果 2 个 ppl 具有相同的数字,则只有最后一个会在您通过对包含数字和字符串的列表进行交叉解析修复 ValueError 后存活 - 对列表周围的 int 感到抱歉。不小心哈哈...我会解决两个人一号问题。

以上是关于如何对包含数字的字符串列表进行数字排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何对数字字符串的python列表进行排序

如何对字符串列表进行数字排序?

如何按字典顺序对 ArrayList 进行排序?

排序包含字符串和整数的数组列表

如何在iOS中对包含数字和名称的字符串数组进行排序

如何对R中元素包含字母和数字的字符向量进行排序?