วิธีการแปลงชุดเป็นรายการในหลาม?


145

ฉันพยายามแปลงชุดเป็นรายการใน 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 interpreter
John La Rooy

3
@gnibbler: คุณควรใส่คำตอบนั่นเป็นสิ่งที่ชัดเจนว่ามันทำลายมันอย่างไร
Chris Morgan

2
มันแย่เกินไปที่คำถามถูกแก้ไขเพื่อแก้ไขปัญหา มันสับสนที่จะเห็นรหัสที่ถูกต้องตามด้วยข้อผิดพลาดที่จะไม่สร้าง ในความเป็นจริงคำถามดั้งเดิมก่อนการแก้ไขไม่ได้ทำให้เกิดข้อผิดพลาดที่แสดง ฉันสงสัยว่านี่เป็นข้อผิดพลาดในการคัดลอกและวาง
LS

คำตอบ:


195

มันเป็นรายการอยู่แล้ว

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

คุณต้องการอะไรไหม

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

แก้ไข: แสดงความคิดเห็นล่าสุดของคุณ

>>> 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 นั่นคือก่อนที่คุณจะแก้ไขโค้ด รหัสปัจจุบันของคุณทำงานได้ดีบนเครื่องของฉัน คุณลองคัดลอกวางที่ลงในล่ามหลามตามที่เป็นอยู่และวางผลลัพธ์ที่นี่
ผู้ใช้

1
ลองสิ่งนี้: >>> my_list = [1,2,3,4] >>> my_set = set (my_list) >>> my_new_list = รายการ (my_set) Traceback (การโทรล่าสุดครั้งล่าสุด): ไฟล์ "<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

[แก้ไข] ดูเหมือนคุณก่อนหน้านี้จะมี "รายชื่อ" นิยามใหม่ซึ่งใช้เป็นชื่อตัวแปรเช่นนี้:

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) 

เพื่อแปลงเป็นรายการ คุณสามารถใช้รายการที่สร้างขึ้นใหม่เช่นรายการปกติใด ๆ ในหลามตอนนี้


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)จะสร้างสิ่งอันดับ (แต่ยังไม่มีรายการ)


@ รับการแก้ไขของคุณดูเหมือนดีสำหรับฉันอย่างน้อยบล็อกแรก คุณยังคงมีข้อผิดพลาดหรือไม่? คุณสามารถลองสิ่งนี้ในบรรทัดคำสั่งใหม่ได้หรือไม่? คุณจะได้อะไรเมื่อพิมพ์แค่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)และมันทำให้เกิดความสับสน คำตอบของคุณไม่ควรถูกลดลง แต่มันก็ไม่ได้เชื่อมโยงผู้อ่าน te :) เราแค่อ่านอย่างคร่าว ๆ และเห็นสิ่งผิดพลาด
Vladimir Vukanac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.