Python 面试总结

多条件排序问题:

# 样例输入
input:  [2, 3, 3, 4, 1, 1, 1, 6, 6, 4, 7, 8, 55, 4]

# 需求:按元素的出现次数降序排列,出现次数相同的元素按值降序排列

# 样例输出
output: [4, 4, 4, 1, 1, 1, 6, 6, 3, 3, 55, 8, 7, 2]

Solution:

>>> from collections import Counter

>>> input = [2, 3, 3, 4, 1, 1, 1, 6, 6, 4, 7, 8, 55, 4]
>>> output = []

>>> c = Counter(input)
>>> c
Counter({1: 3, 4: 3, 3: 2, 6: 2, 2: 1, 7: 1, 8: 1, 55: 1})

>>> m = c.most_common() # 按出现次数降序排列
>>> m
[(1, 3), (4, 3), (3, 2), (6, 2), (2, 1), (7, 1), (8, 1), (55, 1)]

>>> s = sorted(m, key=lambda x: (x[1], x[0]), reverse=True) # 匿名函数返回一个元组,按照元组内元素的顺序排序
>>> s
[(4, 3), (1, 3), (6, 2), (3, 2), (55, 1), (8, 1), (7, 1), (2, 1)]

>>> for v, c in s:
...     output += [v] * c
...

>>> output
[4, 4, 4, 1, 1, 1, 6, 6, 3, 3, 55, 8, 7, 2]

获取两个日期之间的所有日期:

# 样例输入(两个日期的年份不一定相同)
input: start=2017/7/11 end=2017/7/16

# 需求:返回两个日期之间所有日期的列表

# 样例输出
output: [2017/7/11, 2017/7/12, 2017/7/13, 2017/7/14, 2017/7/15, 2017/7/16]

Solution:

from datetime import datetime, timedelta

def get_date_list(start, end):
    date_list = []
    start = datetime.strptime(start, '%Y/%m/%d')
    end = datetime.strptime(end, '%Y/%m/%d')
    if start > end:
        return []
    else:
        day_range = (end - start).days # 两个日期相差的天数,即输出的日期范围
        for d in xrange(day_range):
            date_list.append(start + timedelta(days=1) * d ) # 开始日期逐个加 1 days 得到所有日期
        date_list.append(end) # 上面得到的日期列表不包含end日期
        return date_list

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值