hackerrank中python题目的套路

使用getattr

很多题目都是需要执行类似于这样的操作:

insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print

忽略print,里面的第一个参数与list对象的中的方法一致,但是后面的参数数量有差异:0-2个,所以对于题目:https://www.hackerrank.com/challenges/python-lists/problem

可以使用这样的逻辑:

if __name__ == '__main__':
    N = int(input())
    res = list()
    for _ in range(N):
        inp = input().split()
        if inp[0] == 'print':
            print(res)
            continue
        getattr(res, inp[0])(*map(int, inp[1:]) if len(inp) > 1 else [])
    # print(*[item for item in d])

输出一个列表中的全部元素, 比如说:

In [149]: polar(s)
Out[149]: (5.0990195135927845, -1.7681918866447774)
print(*polar(s))

想要用两个不同的类

如果同时想要用 Counter 和 OrderedDict,可以写一个空的类,然后直接同时实例化:

from collections import Counter, OrderedDict

    class OrderedCounter(Counter, OrderedDict):
        pass
    [print(*c) for c in OrderedCounter(sorted(input())).most_common(3)]
```'

# itertools.product的问题

这个问题:https://www.hackerrank.com/challenges/maximize-it/problem

本来绝大多数人第一反应都是用product解决,看到一位老爷子,非常优雅的用lambda表达式解决了。

```python
from itertools import product
K, M = map(int,input().split())
data = [map(int,input().split()[1:]) for _ in range(K)]

F = lambda x: x**2               
S = lambda x: sum(map(F, x)) % M

print(max(map(S, product(*data))))

你可能感兴趣的:(hackerrank中python题目的套路)