上篇文章《yukuan liu:学习Python之HelloWorld》实现了A+B问题的计算,但它只支持一个数字一个数字的输入,输入一个数字就要敲一下回车,可否同时输入“加数 被加数”敲一次回车?下面我们来继续改进下代码。
方法一:split方法,通过指定分隔符对字符串进行切片,默认分隔符是空格。
x=input("请输入加数 被加数:").split()
print(int(x[0])+int(x[1]))
方法二:Python的tuple是支持同时赋值给两个变量
(x, y) = (int(x) for x in input().split())
print(x + y)
上面第一行写的有些简化,涉及 知识点for循环 知识点 tuple元组
# 等价于
l=[]
for x in input().split():
l.append(int(x))
(x,y)=tuple(l)
print(x+y)
Python中Tuple和List的区别与用法
1.语法上的差别
someTuple = (1,2)
someList = [1,2]
2. 数据size上的差别
a = tuple(range(1000))
b = list(range(1000))
a.__sizeof__() # 8024
b.__sizeof__() # 9088
由于tuples的操作拥有更小的size,也就意味着tuples在操作时相比list更快,当数据足够大的时候tuples的数据操作性能更优。
3. 可执行的操作
b = [1,2]
b[0] = 3 # [3, 2]
a = (1,2)
a[0] = 3 # Error
tuples具有immutable的属性,意味着tuples内的元素一旦建立就无法更改、删除、排序,然而我们还是可以向list和tuples添加数据的。
a = (1,2)
b = [1,2] id(a) # 140230916716520
id(b) # 748527696
a += (3,) # (1, 2, 3)
b += [3] # [1, 2, 3]
id(a) # 140230916878160
id(b) # 748527696
4. 用法
由上述可知,tuples是immutable,list是mutable的,所以我们可以将tuples用作dictionary的key,但是list不可以
a = (1,2)
b = [1,2]
c = {a: 1} # OK
c = {b: 1} # Error
因为tuples不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
5. tuple和list存储的数据特性(基于此篇文章)
除了上述区别和用法以外,tuples和list还有一个区别是tuples通常是存储异质元素(heterogeneous)的数据结构,而list通常存储同质元素(homogeneous)的数据结构。
详细解释就是:
- Tuples 通常存储的是一连串的不同种类的事务,但是我们将他们当做一个耦合的整体来处理(比如我们可以把键盘、鼠标、显示器、主机存储在一个tuples里,这些元素都是不同种类的元素,但是放在一起处理时可当作一个计算机硬件系统元素来看待,而一旦定义了这个系统,就不能随意更改已有的元素)
- List 通常存储的是一连串的相同种类的事务,所以我们可以把list中的每个元素都当做一个独立的个体来处理(也就是mutable的思想,例如list中存储了一些随机整数,他们拥有相同的属性(都是整数),但各自独立(没有任何相关性),我们可以单独的更改list中任何元素而不影响整体的数据结构)
一个关于tuples易错的点(廖雪峰Python教程):
要定义一个只有1个元素的tuple,如果你这么定义:
>>> t = (1)
>>> t
1
定义的不是tuple,是1这个数!这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。
所以,只有1个元素的tuple定义时必须加一个逗号,,来消除歧义:
>>> t = (1,)
>>> t
(1,)
Python在显示只有1个元素的tuple时,也会加一个逗号,,以免你误解成数学计算意义上的括号。