Python面试真题一个数组里面有混序的正负数,按照以下要求重新排列:1、按照正负间隔的顺序排序2、同一个符号的数相对顺序不变3、若某一个符号的数较多,按原顺序放在最后。

本文介绍了一道Python面试题的解决方案:如何对数组中的正负数进行间隔排序,并保持相同符号数的相对顺序不变。文章通过示例详细解释了实现思路与代码逻辑。

Python面试真题

一个数组里面有混序的正负数,按照以下要求重新排列:

1、按照正负间隔的顺序排序

2、同一个符号的数相对顺序不变

3、若某一个符号的数较多,按原顺序放在最后。

例如输入:

1, -5, -3, 2, 3, 7, -4, -7, 9, -8, -11, -3, -2

期望输出:

1, -5, 2, -3, 3, -4, 7, -7, 9, -8, -11, -3, -2

解析:

本题主要难点是理解题目需求,不要复杂化题干

考点,列表拼接方法

本题分三种情况考虑: 正数多于负数,正数等于负数,正数少于负数

list1 = [1, -5, -3, 2, 3, 7, -4, -7, 9, -8, -11, -3, -2]
a = [i for i in list1 if i > 0]
b = [i for i in list1 if i < 0]
list2 =[]
if len(a) == len(b):
    for i in a:
        list2.append(a[i])
        list2.append(b[i])

elif len(a) > len(b):
    for i in range(len(b)):
        list2.append(a[i])
        list2.append(b[i])
    list2.extend(a[len(b):])

else:
    for i in range(len(a)):
        list2.append(a[i])
        list2.append(b[i])
    list2.extend(b[len(a):])

print(list2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥一号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值