Переформатирование строки в список целых чисел - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь сравнить два списка, используя set. Проблема в том, что мои списки не в правильном формате. Когда списки сравниваются с использованием set, результат отдельно разбивает каждое число вместо каждого целого.

a = "[1554901200, 1554251400, 1554253200, 1554255000]"
b = "[1554901200, 1554251400, 1554253200]"
print(set(a)& set(b))

>>> set([' ', ',', '1', '0', '3', '2', '5', '4', '9'])

Я бы хотел получить ответ:

>>> set([1554901200, 1554251400, 1554253200])

или я хотел бы найти способ отформатировать список, чтобы набор мог анализировать каждый, а не

a = ["1554901200", "1554251400", "1554253200", "1554255000"]

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Ваши a и b являются строками, поэтому, когда вы делаете из них наборы, он устанавливает в них строки длиной 1. например set("abc") - это набор, содержащий "a", "b", "c". Вы хотите:

a = eval("[1554901200, 1554251400, 1554253200, 1554255000]")
b = eval("[1554901200, 1554251400, 1554253200]")

print(set(a)& set(b))

вместо этого. Это создает два списка целых чисел и создает наборы, содержащие целые числа в каждом списке, а затем пересекает их.

Убедитесь, что вы доверяете входам eval.

0 голосов
/ 30 марта 2019

Вам нужна функция eval():

a = "[1554901200, 1554251400, 1554253200, 1554255000]"
b = "[1554901200, 1554251400, 1554253200]"
print(set(eval(a))& set(eval(b)))

Результаты в

{1554901200, 1554251400, 1554253200}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...