Как объединить элементы в списке, которые находятся в пределах n друг от друга - PullRequest
1 голос
/ 06 ноября 2019

У меня есть два списка:

list_1 = []
list_2 = [1.0, 3.0, 3.15, 1.03, 6.0, 7.0]

И я хочу отсортировать этот список и объединить элементы, которые находятся (в данном случае) 0.15 друг с другом.

Таким образом, к концу этого, list_1 с содержит следующие значения:

[[1.0, 1.03],[3.0, 3.15]]

Поскольку 1.0, 1.03 были в пределах 0,15 друг от друга и 3.0,3.15 были также в пределах 0,15 друг от друга.

Это также может быть больше, чем просто пары, например, если бы у меня было 3.16, то есть в пределах диапазона 3.15, так что это было бы добавленов группу, то есть:

list_2 = [1.0, 3.0, 3.15, 1.03, 6.0, 7.0, 3.16]

выходы:

[[1.0,1.03],[3.0,3.15,3.16]]

Как я могу это сделать?

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

1 Ответ

2 голосов
/ 06 ноября 2019

networkx здесь излишне. Просто сначала отсортируйте список, затем итерируйте и получайте фрагмент, когда разница между предыдущим и текущим больше, чем ваша дельта.

>>> list_2 = [1.0, 3.0, 3.15, 1.03, 6.0, 7.0, 3.16]
>>> list_2.sort()
>>> delta = 0.15
>>> list_1 = []
>>> prev = -float('inf')
>>> for x in list_2:
...     if x - prev > delta:
...         list_1.append([x])
...     else:
...         list_1[-1].append(x)
...     prev = x
...
>>> list_1
[[1.0, 1.03], [3.0, 3.15, 3.16], [6.0], [7.0]]
>>> [x for x in list_1 if len(x) > 1]
[[1.0, 1.03], [3.0, 3.15, 3.16]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...