Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中对列表进行间接排序_Python_Sorting - Fatal编程技术网

在python中对列表进行间接排序

在python中对列表进行间接排序,python,sorting,Python,Sorting,我有一张清单需要整理 list_of_sent = ['a5 abc xyz','w1 3 45 7','a6 abc deg','r4 2 7 9'] 规则如下 如果第二项是一个数字,它总是在后面出现 其他项目按其字典顺序排序(不改变单个项目的顺序) 在上面的示例中,预期输出为 ['a5 abc deg','a6 abc xyz','r4 2 7 9','w1 3 45 7'] 我理解这是某种形式的间接排序,但不确定如何处理。到目前为止,我已经根据第二项和以后的项目是否有数字来分开列表

我有一张清单需要整理

list_of_sent = ['a5 abc xyz','w1 3 45 7','a6 abc deg','r4 2 7 9']
规则如下

  • 如果第二项是一个数字,它总是在后面出现
  • 其他项目按其字典顺序排序(不改变单个项目的顺序)
在上面的示例中,预期输出为

['a5 abc deg','a6 abc xyz','r4 2 7 9','w1 3 45 7']
我理解这是某种形式的间接排序,但不确定如何处理。到目前为止,我已经根据第二项和以后的项目是否有数字来分开列表。但我不知道接下来该怎么做

def reorderLines(logLines):
    numList = []
    letterList = []
    hashMap = {}

    for item in logLines:
        words = item.split()
        key= words[0]
        hashMap[key] = item
        if words[1].isdigit():
            numList.append(item)
        else:
            letterList.append(item)

    #sort each list individually
    print(numList)
    print(letterList)
编辑:

这将输出

['a5 abc xyz','a6 abc deg']
['w1 3 45 7','r4 2 7 9']
之后我如何继续以达到目标的输出

['a5 abc deg','a6 abc xyz','r4 2 7 9','w1 3 45 7']
我们可以这样写:

def sorting_key(element):
    second_substring = element.split()[1]
    return second_substring.isdecimal(), element
然后像这样使用它

或者,如果我们不需要旧订单,我们可以对已发送的
列表进行排序(可能更有效,至少不会占用新
列表的额外内存):

有关与之间差异的更多信息,请参见。

我们可以写以下内容:

def sorting_key(element):
    second_substring = element.split()[1]
    return second_substring.isdecimal(), element
然后像这样使用它

或者,如果我们不需要旧订单,我们可以对已发送的
列表进行排序(可能更有效,至少不会占用新
列表的额外内存):


有关与之间差异的更多信息,请参见。

直接问题的答案很简单

您已经了解了如何将列表拆分为以下两个列表:

['a5 abc xyz','a6 abc deg']
['w1 3 45 7','r4 2 7 9']
现在,你只需要把它们加在一起


但从一开始,这确实不是正确的方法。在研究如何进行自定义排序时,您应该做的第一件事是问问自己,如果您可以轻松地将此列表转换为其他列表,排序是否很简单

例如,假设您有:

list_of_sent = [
    (False, 'a5 abc xyz'), 
    (True, 'w1 3 45 7'),
    (False, 'a6 abc deg'),
    (True, 'r4 2 7 9')]
…其中,如果字符串中的第二个单词是数字,则每个元组中的第一个值为
True

如果这是您的列表,您可以在其上调用
sort
sorted
,这样您就完成了

那么,你能把每个字符串转换成这样的元组吗?当然你可以:

def flagnumbers(words):
    isnumber = words.split()[1].isdigit()
    return isnumber, words
如何将其作为
键传递给
函数对列表进行排序:

list_of_sent = ['a5 abc xyz','w1 3 45 7','a6 abc deg','r4 2 7 9']
print(sorted(list_of_sent, key=flagnumbers))
就这样


文档中的内容更详细地介绍了关键功能,并提供了一些很好的示例。

对您的直接问题的回答很简单

您已经了解了如何将列表拆分为以下两个列表:

['a5 abc xyz','a6 abc deg']
['w1 3 45 7','r4 2 7 9']
现在,你只需要把它们加在一起


但从一开始,这确实不是正确的方法。在研究如何进行自定义排序时,您应该做的第一件事是问问自己,如果您可以轻松地将此列表转换为其他列表,排序是否很简单

例如,假设您有:

list_of_sent = [
    (False, 'a5 abc xyz'), 
    (True, 'w1 3 45 7'),
    (False, 'a6 abc deg'),
    (True, 'r4 2 7 9')]
…其中,如果字符串中的第二个单词是数字,则每个元组中的第一个值为
True

如果这是您的列表,您可以在其上调用
sort
sorted
,这样您就完成了

那么,你能把每个字符串转换成这样的元组吗?当然你可以:

def flagnumbers(words):
    isnumber = words.split()[1].isdigit()
    return isnumber, words
如何将其作为
键传递给
函数对列表进行排序:

list_of_sent = ['a5 abc xyz','w1 3 45 7','a6 abc deg','r4 2 7 9']
print(sorted(list_of_sent, key=flagnumbers))
就这样


文档中的说明更详细地介绍了关键功能,并提供了一些很好的示例。

在注释之后,请执行以下操作:

newlist = []
numList.sort()
letterList.sort()
newlist = letterList + numList
print(numList)
print (letterList)
print (newlist)

在评论之后,请执行以下操作:

newlist = []
numList.sort()
letterList.sort()
newlist = letterList + numList
print(numList)
print (letterList)
print (newlist)

你知道如何将两个列表连接在一起吗?@user202729这不是连接。查看编辑。然后。。。您知道如何分别对每个列表进行排序吗?请注意,您预期的输入/输出有一些交换的元素(输入有一个元素
'a5 abc xyz'
,但输出调用它
'a6 abc xyz'
),您知道如何将两个列表连接在一起吗?@user202729这不是连接。查看编辑。然后。。。您知道如何分别对每个列表进行排序吗?请注意,预期的输入/输出有一些交换的元素(输入有一个元素
'a5 abc xyz'
,但输出调用它
'a6 abc xyz'