高级列表排序

2024-10-02 12:27:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将一个列表排序到更高级的列表中。我正在处理的列表格式如下:

  1. 001混凝土

  2. 005木材,深色

  3. 001 021

  4. 002油毡

  5. 031混凝土,深色

  6. 003 012

  7. 005 051

  8. 005 331

  9. 024木质,浅色

我想排序的顺序,其中索引0-2排序第一,因为这些总是数字,然后(索引从那里3:)字母是优先顺序,因为这些是标题。它应该这样对列表排序:

  1. 001混凝土

  2. 001 021

  3. 002油毡

  4. 003 012

  5. 005木材,深色

  6. 005 051

  7. 005 331

  8. 024木质,浅色

  9. 列表项

  10. 031混凝土,深色

到目前为止,我已经尝试删除标题索引中的项目、排序和替换项目,但没有成功。你知道吗

谢谢你的时间。你知道吗


Tags: 项目标题列表排序顺序格式字母时间
2条回答

以下是@Poolka提供的(稍加修改)答案,并在其评论中描述和要求了一些额外的压缩。你知道吗

list0=IN[0]
list1=IN[1]
list2=IN[2]
list3=IN[3]

def key_first(string):
    return string[0].split()[0]

def key_second(string):
    if string[0].split()[1][0].isdigit():
        return string[0].split()[1]
    else:
        return " " + string[0].split()[1]


list0,list1,list2,list3 = zip(*sorted(zip(list0,list1,list2,list3),key=key_second))

list0,list1,list2,list3 = zip(*sorted(zip(list0,list1,list2,list3),key=key_first))

我将输出设置为:

OUT = [list,list1,list2,list3]

如果要对字符串进行排序,则可以使用以下代码:

a = ["001 Concrete", "005 Wood, dark", "001 021", "002 Linoleum", "031 Concrete, dark", "003 012", "005 051", "005 331", "024 Wood, light"]

def key_first(string):
    return string.split()[0]

def key_second(string):
    # first - detect if we deal with words or numbers
    val = string.split()[1][0].isdigit()
    # if numbers - it is ok
    if val:
        return string.split()[1]
    # if words - they should go before numbers - let's add space
    else:
        return ' ' + string.split()[1]

# sort words and secondary numbers
result = sorted(a, key=key_second)
# sort primary numbers
result = sorted(result, key=key_first)

代码似乎提供了示例数据的所需输出。你知道吗

相关问题 更多 >

    热门问题