Вы не добавили некоторые данные в тестовый код, и я не знаю, является ли это вашей проблемой, но вы неправильно сравниваете значения в
source[counter] and dest[counter] == source[counter+1] and dest[counter+1]
, потому что это означает
(source[counter]) and (dest[counter] == source[counter+1]) and (dest[counter+1])
Вы должны сравнить каждый элемент отдельно
source[counter] == source[counter+1] and dest[counter] == dest[counter+1]
или вы можете сравнить кортежи или списки
(source[counter], dest[counter]) == (source[counter+1], dest[counter+1])
Вместо zip(source, dest):
вы можете использовать zip(CombinePacket, CombinePacket[1:])
, и вы будетеимеют обе комбинированные строки, которые можно использовать для создания новой. И вы получите все данные в виде списка, чтобы вы могли сравнивать списки с [source, dest]
results = []
for x, y in zip(combine_packet, combine_packet[1:]):
if (x[0:2] == y[0:2]): # `[source, dest]`
data = [x[0], x[1], x[2], y[2], y[3]]
print(data) # (['172.217.2.161'], ['10.247.15.39'], '13:25:31:044180', '13:25:31:044371', '46')
results.append(data)
Но я не знаю, может ли быть три строки с одинаковым source, dest
и какого результата вы ожидаетеэти три ряда.
def combine_data(source, dest, time, length):
combine_packet = list(zip(source, dest, time, length))
results = []
for x, y in zip(combine_packet, combine_packet[1:]):
if (x[0:2] == y[0:2]):
#print(x) # (['172.217.2.161'], ['10.247.15.39'], '13:25:31.044180', '0')
#print(y) # (['172.217.2.161'], ['10.247.15.39'], '13:25:31.044371', '46')
data = [x[0], x[1], x[2], y[2], y[3]]
print(data) # (['172.217.2.161'], ['10.247.15.39'], '13:25:31:044180', '13:25:31:044371', '46')
results.append(data)
return results
source = [['172.217.2.161'], ['172.217.2.161'], ['0.0.0.0']]
dest = [['10.247.15.39'], ['10.247.15.39'], ['10.247.15.39']]
time = ['13:25:31.044180', '13:25:31.044371', '13:25:31.044371']
length = ['0', '46', '123']
combine_data(source, dest, time, length)