Як перетворити набір у список у python?


143

Я намагаюся перетворити набір у список в Python 2.6. Я використовую цей синтаксис:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Однак я отримую такий слід стека:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable

Як я можу це виправити?


2
Працює для мене на Python 2.6.6 в Linux ... але цей перший рядок не створює набір.
detly

2
Відповідно TypeError: 'set' object is not callable: Що таке set? Спасибі
їмо

13
Ви затінили вбудований набір. Можливо, ви випадково набрали set=set(first_list)чи щось. Тепер setпереосмислюється для цього встановленого об'єкта, що може спричинити цю помилку. Спробуйте ще раз із свіжим перекладачем Python
John La Rooy

3
@gnibbler: ви повинні ставити це як відповідь, оскільки це явно те, що це порушило.
Кріс Морган

2
Дуже погано, що питання було відредаговано для усунення проблеми. Неправильно бачити правильний код з подальшими помилками, які він не генерує. Насправді, оригінальне запитання перед правками також не викликає показаної помилки. Я підозрюю, що це помилка копіювання та вставки.
LS

Відповіді:


194

Це вже список

type(my_set)
>>> <type 'list'>

Ви хочете чогось подібного

my_set = set([1,2,3,4])
my_list = list(my_set)
print my_list
>> [1, 2, 3, 4]

EDIT: Результат останнього коментаря

>>> my_list = [1,2,3,4]
>>> my_set = set(my_list)
>>> my_new_list = list(my_set)
>>> print my_new_list
[1, 2, 3, 4]

Мені цікаво, чи зробили ви щось подібне:

>>> set=set()
>>> set([1,2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not callable

4
Коли я ввожу (my_set), я отримую <type 'set'>
gath

2
@gath, це було до редагування коду. Ваш поточний код добре працює на моїй машині. Чи можете ви спробувати скопіювати це вставлення в інтерпретатор python таким, який він є, і вставте тут вихід
користувач

1
спробуйте це: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = list (my_set) Відстеження (останній дзвінок останній): Файл "<console>", рядок 1, в <module> TypeError: 'set' об'єкт не може викликатись
gath

1
Б'юсь об заклад, що він випадково прив’язав ім'я 'set' до {1,2,3} або [1,2,3] або щось подібне. (Бо я випадково експериментував)
user3556757

1
Перетворення цілого списку за допомогою цього методу не є надійним: якщо ваш набір є, ([1,2,12,6])і ви list(([1,2,12,6]))отримаєте такий список, як [1,2,1,2,6]
PradyJord,

12

Замість:

first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

Чому б не зробити ярлик цього процесу:

my_list = list(set([1,2,3,4])

Це видалить мандрівки з вашого списку і поверне вам список.


5
Різниці між обома немає. Ви просто накреслили змінні призначення.

7

[EDITED] Здається, ви раніше переосмислили "список", використовуючи його як ім'я змінної, наприклад:

list = set([1,2,3,4]) # oops
#...
first_list = [1,2,3,4]
my_set=set(first_list)
my_list = list(my_set)

І ви отримаєте

Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'set' object is not callable

5

Щоразу, коли ви стикаєтеся з подібними проблемами, намагайтеся спочатку знайти тип даних елемента, який ви хочете перетворити, використовуючи:

type(my_set)

Потім, Використовуйте:

  list(my_set) 

конвертувати його у список. Ви можете використовувати щойно створений список, як і будь-який звичайний список у python.


3

Просто введіть:

list(my_set)

Це перетворить набір у формі {'1', '2'} у список у формі ['1', '2'].


2

Перегляньте свій перший рядок. Ваш слід стека явно не з коду, який ви тут вставили, тому я не знаю точно, що ви зробили.

>>> my_set=([1,2,3,4])
>>> my_set
[1, 2, 3, 4]
>>> type(my_set)
<type 'list'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

Те, що ви хотіли, було set([1, 2, 3, 4]).

>>> my_set = set([1, 2, 3, 4])
>>> my_set
set([1, 2, 3, 4])
>>> type(my_set)
<type 'set'>
>>> list(my_set)
[1, 2, 3, 4]
>>> type(_)
<type 'list'>

Виняток "не дзвонить" означає, що ви робили щось на кшталт set()()- намагалися викликати setекземпляр.


0

Я не впевнений, що ви створюєте набір за допомогою цього ([1, 2])синтаксису, а не список. Щоб створити набір, слід використовувати set([1, 2]).

Ці дужки просто обволікають ваше вираження, як би ви написали:

if (condition1
    and condition2 == 3):
    print something

Ви насправді не ігноруєте, але нічого не робіть на свій вираз.

Примітка: (something, something_else)створить кортеж (але все ще немає списку).


@gath ваша редакція мені здається прекрасною, принаймні перший блок. Ви все ще маєте помилку? Чи можете ви спробувати це в новому командному рядку? Що ви отримуєте, коли просто набираєте текст set?
Joël

0

Python - це динамічно набрана мова, що означає, що ви не можете визначити тип змінної, як це робиться в C або C ++:

type variable = value

або

type variable(value)

У Python ви використовуєте примушування, якщо ви змінюєте типи, або функції init (конструктори) типів, щоб оголосити змінну типу:

my_set = set([1,2,3])
type my_set

дасть вам <type 'set'>відповідь.

Якщо у вас є список, зробіть це:

my_list = [1,2,3]
my_set = set(my_list)

-1

Хммм, я обділяюся, що в деяких попередніх рядках у вас є щось на кшталт:

list = set(something)

Я помиляюся ?


Як згадувалося вище в одній відповіді, ви також маєте те саме припущення. У головному коді питання, ймовірно, було встановлено listрівне створенню набору set(values). І це робило плутанину. Ваша відповідь не повинна бути озвученою. Але також це не підключення читачів :) Ми просто скупимось і бачимо неправильну річ.
Володимир
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.