在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'
)