#python
Вопрос:
Я хочу установить индекс для моих элементов набора. Например, если бы мой набор был равен:
A = {'a', 'b', 'c', 'd'}
Я хочу преобразовать это в:
B = {('a', 0), ('b', 1), ('c', 2), ('c', 4)}
есть ли в Python какой-нибудь способ сделать это?
Комментарии:
1. Знаете ли вы, что набор в Python не упорядочен? Это означает, что заказ не гарантирован
2.
c,4
? Разве это не должно бытьd,3?
:B=sorted({(j,i) for i,j in enumerate(A)},key= lambda x: x[1])
3. @DanielHao Я просто хотел присвоить им несколько разных целых чисел
Ответ №1:
B = {(elem, idx) for idx, elem in enumerate(A)}
Порядок не определен для наборов, поэтому, если вам нужен порядок, набор не является правильной структурой данных.
Комментарии:
1. Я просто хотел присвоить им несколько разных целых чисел, но не хотел их заказывать.
Ответ №2:
Это вернет индекс в качестве первого элемента кортежей:
set(enumerate(A))
# {(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')}
Это вернет в качестве вывода индекс в качестве второго элемента кортежей:
set(zip(A, range(len(A)))
# {('a', 0), ('b', 1), ('c', 2), ('d', 3)}
Комментарии:
1. Почему ты делаешь
set(enumerate(A))
иzip()
?enumerate
он сам возвращает кортеж со счетчиком и элементом2. Тип вывода установлен правильно?. Вопрос хочет преобразовать набор символов в набор кортежей
3. Если вы хотите работать со
zip
мной , я бы предпочелset(zip(A, range(len(A))))
… хотя я предпочитаю понимание 🙂4. Да, это более общее
Ответ №3:
Вы можете сделать следующее:
B=sorted({(j,i) for i,j in enumerate(A)},key= lambda x: x[1])