问题的提出和解决方案概述
这篇文章将向你展示如何在 Python 中访问和检索 tuple元素。
定义:PythonTuples是一种类似于Lists的数据结构类型。然而,Tuples是用圆括号 ,是() 不可改变的,而Lists是用方括号 ,是[] 可改变的。 另一点值得一提的是,Tuples往往比Lists更节省内存。
为了使它更有趣,我们有以下的运行场景。
你的老板给了你一个Tuples列表,其中包含来自国家犯罪信息中心的NCIC代码的前10行。 你的任务是提供各种方法来访问和检索这些图元。
样本数据
ncic_codes = [(101, 'Treason'), (102, 'Treason Misprision'),
(103, 'Espionage'), (104, 'Sabotage'),
(105, 'Sedition'), (106, 'Selective Service'),
(199, 'Sovereignty-Remarks'), (201, 'Military Desertion'),
(299, 'Military-Remarks'), (301, 'Illegal Entry')]
问题:我们如何编写代码来访问这些 Tuple元素?
我们可以通过以下方法之一来完成这项任务。
- 方法1 :使用
index来访问Tuple元素 - 方法2 :使用List Comprehension来访问Tuple元素
- 方法3 :使用List Comprehension来搜索Tuple元素的列表
- 方法4:使用解包来访问元组元素
- 方法5:使用
Slicing来访问Tuple元素 - 方法6:使用
filter()和一个lambda来过滤一个图元的列表
方法1:使用索引来访问特定的元组元素
这个方法使用 Tuple`index`来访问和显示特定的 Tuple元素。
code_103 = ncic_codes[2][1]
print(code_103)
要访问一个特定的 Tuple元素,请参考 Tuple和索引值。 在这个例子中,突出显示的一行检索了匹配的犯罪代码103的犯罪描述。
要做到这一点,首先要引用包含所需信息的特定 Tuple元素(ncic_codes[2])。如果输出到终端,则显示如下 Tuple显示。
| (103, 'Espionage') |
然而,我们需要添加[1] (ncic_codes[2]**[1]**)来检索违法行为描述。结果保存到code_103 ,并输出到终端。
| Espionage |
方法2:使用列表理解来访问所有元组元素
这个方法使用List Comprehension来访问和显示一个Tuple列表中的所有Tuple元素。
all_tuples = [x for x in ncic_codes]
print(all_tuples)
上面使用List Comprehension来循环浏览ncic_codes 中的每个Tuple,并将它们保存到all_tuples 。all_tuples 的内容被输出到终端。
[(101, 'Treason'), (102, 'Treason Misprision'), (103, 'Espionage'), (104, 'Sabotage'), (105, 'Sedition'), (106, 'Selective Service'), (199, 'Sovereignty-Remarks'), (201, 'Military Desertion'), (299, 'Military-Remarks'), (301, 'Illegal Entry')] |
方法3:使用List Comprehension来搜索Tuples列表
这个方法使用列表理解法来搜索并返回 [Tuples](https://blog.finxter.com/the-ultimate-guide-to-python-tuples/) 从一个符合所述标准的图元列表中返回。
search_res = [x[0] for x in ncic_codes if x[0] >= 200]
print(search_res)
以上使用了 List Comprehension来搜索并返回 Tuples从一个犯罪代码大于或等于(>=)200的图元列表中搜索并返回。结果保存在search_res ,并输出到终端。
[201, 299, 301]
方法4:使用解包法
n_codes = (101, 102, 103, 104, 105)
code_101, *_ = n_codes
print(n_codes)
上面声明了一个 Tuple包含国家犯罪信息中心的前五(5)个犯罪代码,并将它们保存到n_codes 。
下面一行引用了第一个 Tuple元素,code_101 。然后,调用*_ 。这就是 unpacking符号,表示Python要检索(解压)其余的元素。 Tuple元素。然后这些结果被输出到终端。
(101, 102, 103, 104, 105)
方法5:使用切分法
这个方法使用切分法从一个图元列表中检索特定的 [Tuples](https://blog.finxter.com/the-ultimate-guide-to-python-tuples/)从一个图元列表中检索特定的元素。
sliced = ncic_codes[3:6]
print(sliced)
上面使用分片法检索了三(3)个 [Tuples](https://blog.finxter.com/the-ultimate-guide-to-python-tuples/)从ncic_codes ,从位置3开始,停止位置为6 (6-1),相当于ncic_codes[3:6] 。
结果保存到sliced ,并以切片的图元列表的形式输出到终端。
[(104, 'Sabotage'), (105, 'Sedition'), (106, 'Selective Service')] |
下面粗体 字的图元表示使用上述切片范围提取的数据。
[(101, 'Treason'), (102, 'Treason Misprision'), (103, 'Espionage'), (104, 'Sabotage'), (105, 'Sedition'), (106, 'Selective Service'), (199, 'Sovereignty-Remarks'), (201, 'Military Desertion'), (299, 'Military-Remarks'), (301, 'Illegal Entry')] |
方法6:使用过滤器和Lambda
这个方法使用 filter()并传递一个 lambda作为参数,从一个图元列表中搜索并返回符合所述标准的图元。
ncic_filter = list(filter(lambda x: x[0] == 199, ncic_codes))
print(ncic_filter)
以上调用的是 filter()方法,并传递一个[lambda](https://blog.finxter.com/a-simple-introduction-of-the-lambda-function-in-python/)作为参数。这将循环搜索ncic_codes ,并返回元组的第一个元素(犯罪代码)等于199的元组。结果被转换为列表格式,保存到ncic_filter ,并输出到终端。
[(199, 'Sovereignty-Remarks')] |
摘要
这(6)种从图元列表中访问元素的方法应该给你足够的信息来选择最适合你编码要求的方法。
祝您好运,编码愉快!