我對元組符號略有困惑。元組中的每個元素都被當作元組來對待,還是作爲該元素的任何類型?元組元素,它們自己的元組?
例如,對於該元組t = (1,2,3,4)
,1 in t
是True
,這意味着INT 1
是在元組t
。
但是,如果我評估t[0:1]
,我們得到元組(1,)
。
更加混亂的是,(1,) in t
是False
。
這是怎麼回事?這是什麼;元組或元素是t
的元素?
我對元組符號略有困惑。元組中的每個元素都被當作元組來對待,還是作爲該元素的任何類型?元組元素,它們自己的元組?
例如,對於該元組t = (1,2,3,4)
,1 in t
是True
,這意味着INT 1
是在元組t
。
但是,如果我評估t[0:1]
,我們得到元組(1,)
。
更加混亂的是,(1,) in t
是False
。
這是怎麼回事?這是什麼;元組或元素是t
的元素?
不,他們不是。
但切片[0:1]
將永遠給你可迭代的一個子集。如果你想獲得元素,只需要這樣做:t[0]
。這是一個整數,而不是元組。
元組內的所有項目可以是元組或其他數據類型。你甚至可以混合元組中包含的項目類型。
當您使用t[0:1]
你切片,這給你,你是切片對象的部分。 read the docs。
在另一方面,你可以通過與t[0]
索引訪問的元組內的項目。 more docs
可以檢查對象類型:
t = (1,2,3,4)
type(t)
Out[12]: tuple
type(t[1])
Out[13]: int
type(t[:1])
Out[14]: tuple
t2 = ('a',1, (0,1))
for item in t2:
print(type(item))
<class 'str'>
<class 'int'>
<class 'tuple'>
顯然,'噸[0:1]'不返回t'的'的元素,但一個t'的' 「子元組」,這是爲什麼'(1,)在t'中是'False'。 – chepner
您正在使用't [0; 1]'訪問元組的一個元素寬度的切片。這些片是元組,但元素仍然是以前的任何類型。 –
元組的元素不是元組,而是* slice *。嘗試't [0]'或't [1]'獲得一個元素而不是't [0:1]' –