Как добавить индекс для набора участников и преобразовать участников в кортеж?

#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])