Боюсь что универсального решения для любых типов данных достичь не получится хотя бы потому что внутреннее представление различных типов зависит от интерпретатора и платформы, и в общем случае непостоянно.
Но для str и int могу предложить такое решение:
def xor_bytes(data):
accumulator = 0
for item in data:
if isinstance(item, int):
string = to_bytes(item)
elif isinstance(item, str):
string = item
else:
raise Exception('Invalid item type')
for char in string:
accumulator ^= (ord(char) & 0xff)
return accumulator
И вспомогательная функция для python2, в котором int.to_bytes() не существует:
def to_bytes(n, length=8, endianess='big'):
h = '%x' % n
s = ('0'*(len(h) % 2) + h).zfill(length*2).decode('hex')
return s if endianess == 'big' else s[::-1]