LeetCode922按奇偶排序数组II

给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
示例:
输入:[4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
提示:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000

思路:
奇数放在一个列表,偶数放在一个列表,再交叉遍历构成一个新的列表

Python代码实现如下:

class Solution(object):
    def sortArrayByParityII(self, A):
        """
        :type A: List[int]
        :rtype: List[int]
        """
        res=[]
        n1=[]
        n2=[]
        for i in A:
            if i%2==0:
                n1.append(i)
            elif i%2==1:
                n2.append(i)
        for i in range(len(n1)):
            res.append(n1[i])
            res.append(n2[i])
        
        return res

升级版 别人的脑子怎么都这么好使。。。来源于题目评论区
python代码实现如下:

from itertools import chain

class Solution:
    def sortArrayByParityII(self, A):
        """
        :type A: List[int]
        :rtype: List[int]
        """
        odd = []
        even = []
        for i in A:
            if i & 1: # 和1做与运算来判断奇偶数
                even.append(i)
            else:
                odd.append(i)

        return list(chain(*zip(odd, even)))

*zip函数:
zip() 函数用于将可迭代对象作为参数,将对象中 对应的元素 打包成一个个元组,然后返回由这些元组组成的对象。
如果各个可迭代对象的元素个数不一致,则返回的对象长度与最短的可迭代对象相同。
利用 * 号操作符,与zip相反,进行解压。

举例转自(https://www.runoob.com/python/python-func-zip.html)

列表元素依次相连:

# -*- coding: UTF-8 -*-

l = ['a', 'b', 'c', 'd', 'e','f']
print l

#打印列表
print zip(l[:-1],l[1:])
输出结果:

['a', 'b', 'c', 'd', 'e', 'f']
[('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', 'e'), ('e', 'f')]

chain函数: 就是链的意思
chain函数来自于itertools库,itertools库提供了非常有用的基于迭代对象的函数,而chain函数则是可以串联多个迭代对象来形成一个更大的迭代对象 使用条件:你想在多个对象执行相同的操作,但是这些对象在不同的容器中,使代码在不失可读性的情况下避免写重复的循环

我理解就是连一起再固定类型
举例如下:

letters = ['a', 'b', 'c', 'd', 'e', 'f']
booleans = [1, 0, 1, 0, 0, 1]
 
    print(list(itertools.chain(letters,booleans)))
#     ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1]
 
    print(tuple(itertools.chain(letters,letters[3:])))
#     ('a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f')
 
    print(set(itertools.chain(letters,letters[3:])))
#     {'a', 'd', 'b', 'e', 'c', 'f'}
        
    print(list(itertools.chain(letters,letters[3:])))
#     ['a', 'b', 'c', 'd', 'e', 'f', 'd', 'e', 'f']
 
    for item in list(itertools.chain(letters,booleans)):
        print(item)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值