python 如何访问元组项?

y4ekin9u  于 2023-04-28  发布在  Python
关注(0)|答案(2)|浏览(100)

我是Python新手,遇到了一个问题。我有一个元组作为变量。当我运行下面的脚本来获取特定的值时,我得到一个错误:

row = ('ip-172-17-11-22', 'i-050303gfredsgda', None, None, 'Linux Server', None, None)
for i in row:
    if i[4] ==  'Linux Server':
        print(i[2])
    else:
        print("no value")

下面是错误:

no value
no value
Traceback (most recent call last):
  File "test-data.py", line 4, in <module>
    if i[4] ==  'Linux Server':
TypeError: 'NoneType' object is not subscriptable
ar5n3qh5

ar5n3qh51#

if row[4] == 'Linux Server':
    if row[2]:
        print(row[2])
    else:
        print("no value")
else:
    print("no value")
yfwxisqw

yfwxisqw2#

实际上,你想做的是,在伪代码中:

for element in row:
    if element = '...'
    print(element that is 2 indexes before)

问题是这个“元素在2个索引之前”:你不能使用基于你所在的元素的相对位置。解决方案是使用enumerate,这样就可以得到元素及其索引

row = ('ip-172-17-11-22', 'i-050303gfredsgda', None, None, 'Linux Server', None, None)
for i, item in enumerate(row):  # each iteration will return a tuple:(item index, item)
    if item ==  'Linux Server':
        print(row[i-2])
    else:
        print("no value")

注意:如果“Linux Server”的位置低于2,则row[i-2]可能会产生意外的结果,因为使用负索引对应于从元组(或列表)的末尾向后计数。
例如:在您的示例中,

row[-1] --> None, 
row[-2] --> None, 
row[-3] -->'Linux Server',
etc.

因此,处理i-2为负的情况可能是有用的。

相关问题