2015-11-12 4 views
0

Я довольно новичок в Python, и я по-прежнему занимаюсь базовым материалом для своего курса ИКТ.Вычитание двух элементов из двух списков для команды

У меня есть задача создать программу, которая захватывает чужие номера, которые ускоряются. Я сделал время входа и выхода, которое позже будет назначено на 10 разных номерных знаков (этот бит не важен).

Чтобы сэкономить место, я пытаюсь использовать команду for в списках «Оставить» и «Ввод», чтобы убрать элемент «Ввод» из пункта «Оставить», чтобы получить времени, которое потребовалось для получения автомобиля от камеры A до B в программе.

Как я могу сделать это эффективно? Вот что я попробовал, хотя я знаю, почему это неправильно, я не могу найти решение нигде.

import itertools 
 

 
Enter=[7.12, 
 
     7.14, 
 
     7.24, 
 
     7.45, 
 
     7.28, 
 
     7.31, 
 
     7.18, 
 
     7.25, 
 
     7.33, 
 
     7.38] #A list for the times of cars passing Camera A 
 

 
Leave=[7.56, 
 
     7.24, 
 
     7.48, 
 
     7.52, 
 
     7.45, 
 
     7.57, 
 
     7.22, 
 
     7.31, 
 
     7.37, 
 
     7.41] #A list for the times of cars passing Camera B 
 

 
Timestaken=[] 
 

 
for item in itertools.chain(Leave,Enter): 
 
    Timestaken.append(item-item) 
 

 
print(Timestaken)

В результате я получаю это, безусловно, потому что для команды по-прежнему занимает позицию одного списка в сторону от того же пункта ???:

>>> 
 
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

+0

Кстати, по двум пунктам из двух списков я хотел найти более быстрый путь, чем делать Leave [0] -Enter [0], Leave [1] -Enter [1] и т. Д. –

ответ

1

Я думаю, что вы ищете zip

Enter=[7.12, 
     7.14, 
     7.24, 
     7.45, 
     7.28, 
     7.31, 
     7.18, 
     7.25, 
     7.33, 
     7.38] #A list for the times of cars passing Camera A 

Leave=[7.56, 
     7.24, 
     7.48, 
     7.52, 
     7.45, 
     7.57, 
     7.22, 
     7.31, 
     7.37, 
     7.41] #A list for the times of cars passing Camera B 

for enter_data, leave_data in zip(Enter, Leave): 
    print(leave_data - enter_data) 
+0

Ahh, вы, вероятно, используете Python 3. В печатных заявлениях должны быть скобки. Я обновил ответ на работу над Python 3. – Colin

+0

Спасибо за помощь! –

0

Вы можете использовать карту:

for interval in map(lambda x, y: y-x, Enter, Leave): 
    print interval 

Береги это сделали некоторые странные вещи для меня в Python 2.7, когда я пытался напечатать весь список, а не один на один (см здесь Python 2.7.5 error printing list of float numbers)

Смежные вопросы