Python#重新排列列表中包含高低元素的数组?

时间:2017-06-11 08:29:44

标签: python list sorting

我是python中的新手我想用高低值的序列重新排列列表。示例输入是a = [1,2,3,4,5]然后输出应该是 a = [5,1,4,2,3] .i这样解决了任何人有更好的解决方案吗?请指导我。先谢谢你。

number=int(input("how many number do you want to input?"))
number_list=[]
for i in range(number):
    array=int(input())
    number_list.append(array)

print(number_list)
# empty array for adding value in list
tmp=[]
i=0

m=len(number_list)
while i<m:
    # when last element left in array it will add on our tmp list
    if i > len(number_list):
        tmp.extend(number_list)
        # once all value add in array it will break the program
        if len(tmp) == m:
            break
    else:
        high=max(number_list)
        low=min(number_list)


        tmp.append(high)
        tmp.append(low)
        #number_list.remove(high)
        #number_list.remove(low)
# remove the element after added in the list
        number_list.remove(high)
        number_list.remove(low)
        #print(len(number_list))
        #print(tmp)


    i +=1


print(tmp)

3 个答案:

答案 0 :(得分:1)

使用基本的for循环和帮助程序列表非常简单。你是在思考它:

list1 = [1,2,3,4,5]
list1.sort()
resultList = []
for i in range(len(list1)):
    resultList.append(list1[len(list1)-1-i])
    resultList.append(list1[i])

resultList = resultList[:len(resultList)//2]
list1 = resultList

现在,如果您尝试打印它:

print(list1)     # [5, 1, 4, 2, 3]

注意:这仅适用于Python 3,您必须对其进行微调以便与Python 2一起使用

答案 1 :(得分:0)

我的adea是将两个列表或者b和c组合在一起,第一个是列表a的下降顺序,第二个是按顺序递增的顺序

import itertools
b=sorted(a, reverse=True)  
c=sorted(a)
print [x for x in itertools.chain.from_iterable(itertools.izip_longest(b,c)) if x][:len(a)]

答案 2 :(得分:0)

使用min()max()和生成器的另一种方法:

# list passed in argument must be sorted
def get_new_list(a):
    for k in range(int(len(a)/2)+1):
        aa = max(a[k:len(a)-k])
        bb = min(a[k:len(a)-k])
        if aa != bb:
            yield aa
            yield bb
        else:
            yield aa


a = [1,2,3,4,5]
a.sort() 
final = list(get_new_list(a))

print(final)

使用for looplist slicing的另一种方法。这种方法比使用min()max()

更有效
def get_new_list(a):
    for k in range(int(len(a)/2)+1):
        aa = a[k:len(a)-k]
        if len(aa) > 1:
            yield aa[-1]
            yield aa[0]
        else:
            yield aa[0]


a = [5,1,2,3,4]
# list must be sorted 
a.sort()
final = list(get_new_list(a))
print(final) 

两者都会输出:

[5, 1, 4, 2, 3]