本文目录一览:
求助python中一个排序问题!
lines = [x for x in open('/tmp/test.txt',r)]
lines.sort()
print lines
让程序自动排序即可
python 一个排序的问题
题目是不是:
有ABCD四个列表,每个列表有不同的元素(理解为字母);
每次从四个列表里面pop第一个元素组成一个单词作为新列表(输出的列表)的元素;
pop完之后要判断:
D列表长度可以为0
C列表长度可以为0,当D列表长度为0
B列表长度可以为0,当C列表长度为0
A列表长度可以为0,当B列表长度为0
如果有异常(不符合上述条件),组成的单词要追回(remove)。
输出包含新生成单词的列表。
另外要注意异常:
当输入的四个列表已经有长度为0的情况
当第一次pop之后,有列表长度为0的情况
def GenerateRndList():
"Call ListFactory and check whether the list is empty. If it is, repeat ListFactory."
while 1:
list = ListFactory()
if len(list) 0:
return list
def ListFactory():
"Generate list"
from random import randint
List = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
tmpID = randint(0,len(List)) # how many elements require to be removed
for i in range(tmpID):
List.pop(randint(0, (len(List) - 1)))
return List
def AddWord(character_list, debug = False):
"Add word to output list"
global WORD_LIST
word = ''
for i in character_list:
word += i
if debug is True:
print 'Combined - ', word
WORD_LIST.append(word)
def RemoveWord(debug = False):
"Remove final word to output list"
global WORD_LIST
if debug is True:
print 'Remove - ', WORD_LIST[-1]
WORD_LIST.pop()
def Outputter():
print WORD_LIST
def WordVerifier(word):
"Send out word to one web site to verify whether word is meaningful."
pass
def ListVerifier(input_list):
"Check whether length of list items matches the requirement"
global ProcessFlag
# Prepare a flag list, whose element is 1 or 0.
original_length_list = []
for i in range(len(input_list)):
if len(input_list[i]) == 0:
original_length_list.append(0)
if len(input_list[i]) = 1:
original_length_list.append(1)
'''
Compare whether the list is same after sorted,
- if same, rule is matched;
- if not, rule is NOT matched.
'''
compare_length_list = original_length_list[:]
compare_length_list.sort()
compare_length_list.reverse()
if str(compare_length_list) != str(original_length_list):
RemoveWord() # at this time, state maybe [01][01][01]1
ProcessFlag = False
elif original_length_list.count(0) 0:
ProcessFlag = False
def Callback(input_list, Callback_Support_Function):
"Generate new word"
while 1:
new_word = []
for i in range(len(input_list)):
new_word.append(input_list[i].pop(0))
AddWord(new_word)
Callback_Support_Function(input_list)
if ProcessFlag is False:
break
def main(list_number = 4):
INPUT = []
for i in range(list_number):
INPUT.append(GenerateRndList())
print 'Generated lists are,'
for i in INPUT:
print '\t', i
Callback(INPUT, ListVerifier)
Outputter()
# WordVerifier(word)
if __name__ == '__main__':
global WORD_LIST, ProcessFlag
WORD_LIST = []
ProcessFlag = True
main(list_number = 4)
Python学习小技巧之列表项的排序
Python学习小技巧之列表项的排序
本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:
典型代码1:
data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list.sort()
print(data_list)
输出1:
[-100, 0, 1, 3, 6, 9, 10, 100]
典型代码2:
data_list = [6, 9, 1, 3, 0, 10, 100, -100]
data_list_copy = sorted(data_list)
print(data_list)
print(data_list_copy)
输出2:
[6, 9, 1, 3, 0, 10, 100, -100]
[-100, 0, 1, 3, 6, 9, 10, 100]
应用场景
需要对列表中的项进行排序时使用。其中典型代码1是使用的列表自身的一个排序方法sort,这个方法自动按照升序排序,并且是原地排序,被排序的列表本身会被修改;典型代码2是调用的内置函数sort,会产生一个新的经过排序后的列表对象,原列表不受影响。这两种方式接受的参数几乎是一样的,他们都接受一个key参数,这个参数用来指定用对象的哪一部分为排序的依据:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1]) # 我们想要基于列表项的第二个数进行排序
print(data_list)
[(77, 34), (55, 97), (0, 100)]
另外一个经常使用的参数是reverse,用来指定是否按照倒序排序,默认为False:
data_list = [(0, 100), (77, 34), (55, 97)]
data_list.sort(key=lambda x: x[1], reverse=True) # 我们想要基于列表项的第二个数进行排序,并倒序
print(data_list)
[(0, 100), (55, 97), (77, 34)]
带来的好处
1. 内置的排序方法,执行效率高,表达能力强,使代码更加紧凑,已读
2. 灵活的参数,用于指定排序的基准,比在类似于Java的语言中需要写一个comparator要方便很多
其它说明
1. sorted内置函数比列表的sort方法要适用范围更广泛,它可以对除列表之外的可迭代数据结构进行排序;
2. list内置的sort方法,属于原地排序,理论上能够节省内存的消耗;
总结
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助
python 中 set 的排序问题?
set 本身根据定义就是无序的,具体的输出顺序跟实现相关。
方法1 为什么是有序的你可以认为这是一个实现的巧合,实际代码中不应该依赖这个特性(因为别的实现可能不一致,甚至 Python 官方的时候随着版本都有可能变化)。