我是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)
答案 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 loop
和list 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]