除非我添加逗号,为什么长度为1的元组的元组实际上不是元组?

时间:2015-07-08 13:16:22

标签: python python-2.7 indexing tuples elements

给出元组的元组 T

(('a', 'b'))

和单个元组 t1

('a','b')

为什么:

t1 in T

返回False?

更新:来自Ipython:

In [22]: T = (('a','b'))

In [23]: t1 = ('a','b')

In [24]: t1 in T
Out[24]: False

然后如何检查元组是否在另一个元组中?

3 个答案:

答案 0 :(得分:8)

问题是因为T不是元组的元组,它只是一个元组。逗号是一个元组,而不是括号。应该是:

>>> T = (('a','b'),)
>>> t1 = ('a', 'b')
>>> t1 in T
True

事实上,你可以松开外括号:

>>> T = ('a','b'),
>>> t1 = 'a','b'
>>> type(T)
<type 'tuple'>
>>> type(T[0])
<type 'tuple'>
>>> type(t1)
<type 'tuple'>
>>> t1 in T
True

虽然有时需要优先级,但如果有疑问则将它们放入。但请记住,正是逗号使它成为一个元组。

答案 1 :(得分:2)

执行此操作>>> T = (('a','b')) >>> T ('a', 'b') 不会生成包含元组的元组,如您所见:

>>> T = (('a','b'),)
>>> t1 in T
True
>>> T
(('a', 'b'),)

要制作单个元素元组,您需要添加一个试用逗号:

>>> t1 = 'a','b'
>>> t1
('a', 'b')
>>> 1,2,3,4,5,6
(1, 2, 3, 4, 5, 6)

事实上,括号甚至不是一个要求,因为这也会创建一个元组:

$msg =
"<html xmlns='http://www.w3.org/1999/xhtml'>
<body bgcolor='#FFD75B'><br /><br />
<table cellpadding='10' cellspacing='0' border='0' align='center' bgcolor='#ffffff'>
<tr>
    <td align='center'><img src='http://www.BSFlag.com/images/BS-flagGIF.gif' width='301' height='141' /></td>
</tr>
<tr>
    <td align='center' width='600'><h1>" . $FromEmail . " has sent you the BS Flag</h1>
    <h2>for the following reasons:</h2>
<blockquote>" . $Reason . "</blockquote>
<p><em>Learn more about the BS Flag at <a href='http://www.bsflag.com'>www.bsflag.com</a>.</em></p></td>
</tr>
</table>
<br /><br />
</body>
</html>";


//send mail
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "X-Priority: 3\n";
$headers .= "X-MSMail-Priority: Normal\n";
$headers .= "X-Mailer: php\n";
$headers .= "From: "".$companyName."" <".$companyEmail.">\n";    

mail("$to", stripslashes($subject), stripslashes($msg), $headers) or die("Could not send e-mail - Error A46GY7");

答案 2 :(得分:1)

再次检查。您的代码中可能有其他错误。这项检查确实有效。

至于更新,您没有创建嵌套元组。

(('a', 'b')) == ('a', 'b')

如果你需要一个单元素元组,你需要一个尾随昏迷:

(('a', 'b'),)