Python tuple():它何时重新排序?

Python tuple():它何时重新排序?,python,set,Python,Set,我正在使用Python3.7,但在tuple()中感到困惑。有时会对数据进行重新排序,有时则不会: >>> a=tuple([2, 1, 3]) >>> print(a) (2, 1, 3) <== the tuple from list is not re-ordered >>> s={2, 1, 3} >>> b=tuple(s) >>> print(b) (1, 2, 3) <=

我正在使用Python3.7,但在tuple()中感到困惑。有时会对数据进行重新排序,有时则不会:

>>> a=tuple([2, 1, 3])
>>> print(a)
(2, 1, 3)   <== the tuple from list is not re-ordered

>>> s={2, 1, 3}
>>> b=tuple(s)
>>> print(b)
(1, 2, 3)   <== the tuple from set is re-ordered

>>> print(tuple({10, 5, 30}))
(10, 5, 30)  <== the tuple from set is not re-ordered

>>> print(s)
{1, 2, 3}    <== the set itself is re-ordered
>a=元组([2,1,3])
>>>印刷品(a)
(2,1,3)>>s={2,1,3}
>>>b=元组(s)
>>>印刷品(b)
(1,2,3)>>打印(元组({10,5,30}))
(10,5,30)>>打印

{1,2,3}根据定义,元组是一种有序的数据结构,其构造函数是
tuple()

在您的例子中,如果您使用的是
{}
,它不是一个元组,而是一个集合,因此不是有序的


您可以找到官方的python教程。在5.3中,它们还专门处理元组

根据定义,元组是一个有序的数据结构,它们的构造函数是
tuple()

在您的例子中,如果您使用的是
{}
,它不是一个元组,而是一个集合,因此不是有序的


您可以找到官方的python教程。在5.3中,它们也专门处理元组,一个集合是无序的,一个列表是有序的。因此,
tuple(a_列表)
保留列表的顺序,但
tuple(a_集合)
没有规定的顺序可遵循。

集合无序,列表有序。因此
tuple(a_列表)
保留列表的顺序,但
tuple(a_集)
没有规定的顺序。

如您共享的链接中所述:

构造函数构建一个元组,其项与iterable的项相同且顺序相同


由于
set
是按定义不排序的,因此如果将
set
传递为iterable to
tuple()
函数,则无法知道/保证顺序。

如您共享的链接中所述:

构造函数构建一个元组,其项与iterable的项相同且顺序相同


因为
set
根据定义是无顺序的,如果将
set
传递为iterable to
tuple()
函数,则无法知道/保证顺序。

集合已经重新排序,与tuple无关。
{10,5,30}
恰好是按
10,5,30}排序的,30
元组
从不重新排序数据
set
对象本质上是无序的。集合已经被重新排序,与元组无关。
{10,5,30}
恰好被排序为
10,5,30
元组
从不重新排序数据
set
对象本身就是无序的
{a:b}
构造一个字典<代码>{a,b}构造一个集合。用花括号表示哪个词从来没有歧义。
()
不是元组构造函数,它是元组文本的一部分,与
{}
一样,使用术语“构造函数”来描述文本是误导性的,因为不涉及函数调用。同样,也可以用于形成表达式,例如
(x-1)*x
,元组可以不使用括号形成,例如
t=0,1
。谢谢,您的答案是100%正确的,只是让它更具体。wjandrea,谢谢你的澄清。一个文本仍然会导致Python引擎构造对象,不是吗?@Axblert是的,那么Udacity课程就是错误的。但是感谢您对反馈的回复。
{a:b}
构建了一个字典<代码>{a,b}构造一个集合。用花括号表示哪个词从来没有歧义。
()
不是元组构造函数,它是元组文本的一部分,与
{}
一样,使用术语“构造函数”来描述文本是误导性的,因为不涉及函数调用。同样,也可以用于形成表达式,例如
(x-1)*x
,元组可以不使用括号形成,例如
t=0,1
。谢谢,您的答案是100%正确的,只是让它更具体。wjandrea,谢谢你的澄清。一个文本仍然会导致Python引擎构造对象,不是吗?@Axblert是的,那么Udacity课程就是错误的。但感谢您对反馈做出回应。