使用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))))