#python #list #element
#python #Список #элемент
Вопрос:
Я сохраняю начальные и конечные координаты отрезков вместе с некоторыми атрибутами в списке списков с формой.
Я хочу удалить из моего основного списка каждый вложенный список, в котором пара координат (x1 y1, x2 y2) уже существует в моем списке, но поменялась местами (x2 y2, x1 y1)
Мой код:
lines=[[(x1, y1), (x2, y2), id1, id2],[(x2, y2), (x1, y1), id2, id1]] #random example
lns=[ [l[0], l[1]] for l in lines] #make a list only with the node coordinate pairs
for line in lines:
if [line[1],line[0]] in lns:
lines.remove(line)
Результатом этого кода является удаление некоторых элементов, которые я хочу (хотя и не всех), и некоторых, которые не следует удалять. Есть идеи, чего мне может не хватать?
Комментарии:
1. Вам нужно изменить свое
if
условие и добавить идентификаторы в конце:if [line[1],line[0],line[2],line[3]] in lns:
2. @VasilisG. С вашим предложенным условием я могу опустить понимание списка, которое создает список «lns», и выполнить итерацию в моем списке «lines». Тем не менее, у меня все еще есть некоторые строки, которых там не должно быть. Чтобы проверить, «проходят» ли они условие, я применил точно такой же код еще раз в результирующем списке и получил правильный результат. Но это не так, как это должно работать. Я все еще не могу представить, что идет не так.
3. Не могли бы вы предоставить некоторые примеры данных и желаемый результат из них?
4. Вы можете найти файлы .txt и .py с моим кодом здесь, по ссылке . В списках два элемента вместо четырех, поэтому используются только идентификаторы точек. Я не включил координаты точек для простоты. Точно такой же процесс может быть применен к идентификаторам точек вместо этого.
5. Я забыл упомянуть о желаемом выходе, идентификаторы в списке представляют идентификаторы начальной и конечной точек строк. Все строки существуют в списке, определенном от начальной до конечной точки и наоборот. Таким образом, вся пара идентификаторов включается дважды. Мне нужно, чтобы в конечном списке была половина его элементов
Ответ №1:
С небольшими изменениями в исходном коде и после исправления ошибки этот код выдает правильный результат:
lines=[[(x1, y1), (x2, y2), id1, id2],[(x2, y2), (x1, y1), id2, id1]]
for line in lines:
if [line[1],line[0], line[3],line[2]] in lns:
lines.remove([line[1],line[0], line[3],line[2]])