https://medium.com/python-programming-ascendance/5-ways-to-optimize-and-speed-up-your-python-code-aaae33c0c0f5