Python元组是列表结构的另一种选择。下面的例子展示了如何构造一个元组。
contact = ('Joe Gregg','832-6736')
与可以通过使用列表方法添加或删除项的列表不同,元组是一个不可变的结构。上面例子中的元组有两个元素:这个大小是固定的,永远不能改变。
您可以使用与列表相同的索引表示法访问元组中的元素。
电话=联系[1]
您还可以通过为元组中的项分配新值来更新它们。
联系b[1] = ‘555-1212’
元组在数据项属于一起且本身没有意义的情况下特别有用。
这里有一个例子。下面的列表显示了一些货币的货币代码以及美元对该货币的汇率。每种情况下的数字都显示了一美元可以买多少单位的货币。
交换=[(“欧元”,0.869335),(113.0005日元,),\(“英镑”,0.760425),(AUD, 1.40553),(1.29406“CAD”),\(瑞士法郎,0.99148),(‘元’,6.9228),(9.09429“克朗”),\ (NZD, 1.54148),(麦根,18.99626),(1.3809“SGD”))
因为列表跨越多行,所以我在每行的末尾使用了Python的延续字符\。
假设我们想要编写一个程序,提示用户输入外国货币的代码和用户想要购买的货币数量。该程序将计算并打印需要多少美元来购买那么多单位的货币。这里有一些代码可以做到这一点。
exchange = [('EUR', 0.869335), ('JPY', 113.0005),\ ('GBP', 0.760425), ('AUD', 1.40553), ('CAD', 1.29406),\ ('CHF', 0.99148), ('CNY', 6.9228), ('SEK', 9.09429),\ ('NZD', 1.54148), ('MXN‘, 18.99626), (‘SGD‘, 1.3809)] code = input(’输入货币代码:’)amount = float(input(’你想买多少单位?‘) cost = 0 for pair in exchange:如果pair[0] == code: cost = amount/pair[1]如果cost != 0: print(’您的cost是$‘+str(cost))否则:print(’您没有输入有效的代码')
在for循环中使用元组索引表示法的另一种方法是使用一种形式的for循环,将元组的每个成员赋值给不同的循环变量:
对于c,r作为交换:如果c == code: cost = amount/r
有时您希望将来自两个独立列表的数据合并为一个列表。您可能希望这样做的常见情况是打印表。
在之前的讲座中,我展示了一些在表格中打印数据点列表的代码。这是原始代码。
x = (1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, 1980] y =(32.1, 30.5, 24.4, 23日,19.1,15.6,12.4,9.7,8.9,7.2)打印(年人口的)我的范围(0,len (x)):打印(“{:5 d} {: > 4.1 f}’.format (x[我],[我]))
这段代码遍历索引值列表,并使用这些索引值访问两个列表中的元素。
另一种方法是从原始的一对列表构造一个zip列表,然后对其进行迭代。由一对列表组成的zip列表是单个元组列表,原始列表中的每对数据项成为zip列表中的一个元组。下面是表格打印的例子,重写为使用zip列表:
x = [1935,1940,1945,1950,1955,1960,1965,1970,1975,1980] y = [32.1,30.5,24.4,23,19.1,15.6,12.4,9.7,8.9,7.2] data = list(zip(x,y)) print(' Year Population') for Year,pop in data: print('{:5d} {:>4.1f}'.format(Year,pop))
Python列表推导是一种从列表、范围或其他可迭代结构中构造列表的方法。列表推导式经常用于从其他列表中提取数据或从现有数据列表中生成新数据。
这里有一个例子。假设我们想要制作一个仅包含上述示例中的货币代码的列表。我们可以通过使用循环和列表append()方法的组合来实现这一点。
allCodes = [] for c,r in exchange:
列表推导式提供了一种更紧凑的方式来完成相同的事情。
allCodes = [c for r,c in exchange]
列表推导的另一个常见赢博体育是从范围生成列表。例如,如果我们想要创建一个2的幂的列表,我们可以使用下面的代码:
幂= [2**n for n in range(0,10)]
这里有一个更复杂的例子。货币交叉汇率是从一种货币到另一种货币的汇率,有起始货币和目的货币。我们可以使用我们的美元汇率列表来制作兑换列表中任何货币对的交叉汇率。例如,如果我们想建立一个从英镑到人民币的交易所,我们首先将1英镑兑换1/0.760425美元。然后我们将1/0.760425美元兑换成(1/0.760425)*6.9228元人民币。
下面是一个列表推导式,它生成了一个包含赢博体育可能交叉率的表。这是一组嵌套的列表推导式,其中外部推导式使用内部推导式生成交叉率列表,并生成一个列表列表作为最终结果。
cross =[[(0,d,r2/r1) for d,r2 in exchange] for 0,r1 in exchange]
下面是我们应该对结果表做的最后一件事。对角线条目表示原始货币和目的地货币相同的交换。我们应该把赢博体育的交叉速率都设为1。这里有一个for循环可以做到这一点。
对于I在range(0,len(crosses)): crosses[I][I][2] = 1
使用元组重做赋值2。用这些语句启动程序
x = (1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, 1980] y =(32.1, 30.5, 24.4, 23日,19.1,15.6,12.4,9.7,8.9,7.2]data =列表(zip (x, y))
然后在剩下的程序中使用数据列表做其他的事情。尽量不要在以下任何代码中使用x列表或y列表:使用数据列表执行赢博体育操作。
此外,在程序中至少包含一个列表综合。残差列表是一个很好的候选列表:尝试用列表理解而不是循环来构建这个列表。