from timeit import timeit
setup = """aset = set((0, 1, 4, 9, 16, 17, 25, 33, 36, 41, 49, 57))
fset = frozenset(aset)
alist = [1 if i in aset else 0 for i in range(64)]
atup = tuple(alist)
adict1 = {k: 1 for k in aset}
adict01 = {k: v for k, v in enumerate(alist)}
astr = "".join(str(i) for i in alist)
aint = int(astr[::-1], base=2)"""
number = 100000
print("aset", timeit("""for i in range(64): i in aset""", setup=setup, number=number))
print("fset", timeit("""for i in range(64): i in fset""", setup=setup, number=number))
print("alis", timeit("""for i in range(64): alist[i]""", setup=setup, number=number))
print("atup", timeit("""for i in range(64): atup[i]""", setup=setup, number=number))
print("adict1", timeit("""for i in range(64): i in adict1""", setup=setup, number=number))
print("adict01", timeit("""for i in range(64): adict01[i]""", setup=setup, number=number))
print("astr", timeit("""for i in range(64): astr[i]=='1'""", setup=setup, number=number))
print("aint", timeit("""for i in range(64): (aint >> i)&1""", setup=setup, number=number))
print("ainta", timeit("""for i in range(64): (aint >> i)&1==1""", setup=setup, number=number))
"""
CPython3.6
aset 4.607737780628608
fset 6.032637844772291
alis 5.8805711353431676
atup 5.686480051314948
adict1 6.327348300192433
adict01 6.057316741500966
astr 8.837673380372031
aint 14.613222835150737
ainta 18.338140346375887
PyPy3.6
aset 1.233384477228993
fset 1.307999486850545
alis 0.1561483001924313
atup 0.1921026298909556
adict1 1.3074688903143041
adict01 1.0625498396407957
astr 0.5346504169339319
aint 4.463426812059013
ainta 5.157020654265555
"""
ZnJvbSB0aW1laXQgaW1wb3J0IHRpbWVpdAoKc2V0dXAgPSAiIiJhc2V0ID0gc2V0KCgwLCAxLCA0LCA5LCAxNiwgMTcsIDI1LCAzMywgMzYsIDQxLCA0OSwgNTcpKQpmc2V0ID0gZnJvemVuc2V0KGFzZXQpCmFsaXN0ID0gWzEgaWYgaSBpbiBhc2V0IGVsc2UgMCBmb3IgaSBpbiByYW5nZSg2NCldCmF0dXAgPSB0dXBsZShhbGlzdCkKYWRpY3QxID0ge2s6IDEgZm9yIGsgaW4gYXNldH0KYWRpY3QwMSA9IHtrOiB2IGZvciBrLCB2IGluIGVudW1lcmF0ZShhbGlzdCl9CmFzdHIgPSAiIi5qb2luKHN0cihpKSBmb3IgaSBpbiBhbGlzdCkKYWludCA9IGludChhc3RyWzo6LTFdLCBiYXNlPTIpIiIiCgpudW1iZXIgPSAxMDAwMDAKcHJpbnQoImFzZXQiLCB0aW1laXQoIiIiZm9yIGkgaW4gcmFuZ2UoNjQpOiBpIGluIGFzZXQiIiIsIHNldHVwPXNldHVwLCBudW1iZXI9bnVtYmVyKSkKcHJpbnQoImZzZXQiLCB0aW1laXQoIiIiZm9yIGkgaW4gcmFuZ2UoNjQpOiBpIGluIGZzZXQiIiIsIHNldHVwPXNldHVwLCBudW1iZXI9bnVtYmVyKSkKcHJpbnQoImFsaXMiLCB0aW1laXQoIiIiZm9yIGkgaW4gcmFuZ2UoNjQpOiBhbGlzdFtpXSIiIiwgc2V0dXA9c2V0dXAsIG51bWJlcj1udW1iZXIpKQpwcmludCgiYXR1cCIsIHRpbWVpdCgiIiJmb3IgaSBpbiByYW5nZSg2NCk6IGF0dXBbaV0iIiIsIHNldHVwPXNldHVwLCBudW1iZXI9bnVtYmVyKSkKcHJpbnQoImFkaWN0MSIsIHRpbWVpdCgiIiJmb3IgaSBpbiByYW5nZSg2NCk6IGkgaW4gYWRpY3QxIiIiLCBzZXR1cD1zZXR1cCwgbnVtYmVyPW51bWJlcikpCnByaW50KCJhZGljdDAxIiwgdGltZWl0KCIiImZvciBpIGluIHJhbmdlKDY0KTogYWRpY3QwMVtpXSIiIiwgc2V0dXA9c2V0dXAsIG51bWJlcj1udW1iZXIpKQpwcmludCgiYXN0ciIsIHRpbWVpdCgiIiJmb3IgaSBpbiByYW5nZSg2NCk6IGFzdHJbaV09PScxJyIiIiwgc2V0dXA9c2V0dXAsIG51bWJlcj1udW1iZXIpKQpwcmludCgiYWludCIsIHRpbWVpdCgiIiJmb3IgaSBpbiByYW5nZSg2NCk6IChhaW50ID4+IGkpJjEiIiIsIHNldHVwPXNldHVwLCBudW1iZXI9bnVtYmVyKSkKcHJpbnQoImFpbnRhIiwgdGltZWl0KCIiImZvciBpIGluIHJhbmdlKDY0KTogKGFpbnQgPj4gaSkmMT09MSIiIiwgc2V0dXA9c2V0dXAsIG51bWJlcj1udW1iZXIpKQoKIiIiCkNQeXRob24zLjYKYXNldCA0LjYwNzczNzc4MDYyODYwOApmc2V0IDYuMDMyNjM3ODQ0NzcyMjkxCmFsaXMgNS44ODA1NzExMzUzNDMxNjc2CmF0dXAgNS42ODY0ODAwNTEzMTQ5NDgKYWRpY3QxIDYuMzI3MzQ4MzAwMTkyNDMzCmFkaWN0MDEgNi4wNTczMTY3NDE1MDA5NjYKYXN0ciA4LjgzNzY3MzM4MDM3MjAzMQphaW50IDE0LjYxMzIyMjgzNTE1MDczNwphaW50YSAxOC4zMzgxNDAzNDYzNzU4ODcKClB5UHkzLjYKYXNldCAxLjIzMzM4NDQ3NzIyODk5Mwpmc2V0IDEuMzA3OTk5NDg2ODUwNTQ1CmFsaXMgMC4xNTYxNDgzMDAxOTI0MzEzCmF0dXAgMC4xOTIxMDI2Mjk4OTA5NTU2CmFkaWN0MSAxLjMwNzQ2ODg5MDMxNDMwNDEKYWRpY3QwMSAxLjA2MjU0OTgzOTY0MDc5NTcKYXN0ciAwLjUzNDY1MDQxNjkzMzkzMTkKYWludCA0LjQ2MzQyNjgxMjA1OTAxMwphaW50YSA1LjE1NzAyMDY1NDI2NTU1NQoiIiIK