如果有一个列表,比如a=[1,2,3]
,我希望看到if a[4] is null
,有没有办法做到这一点,而不使用异常或断言?
答案 0 :(得分:8)
len
会告诉您列表的长度。引用文档:
len(s)
返回对象的长度(项目数)。参数可以是序列
(字符串,元组或列表)或映射(字典)。
当然,如果您想在list
,tuple
或string
中获取最终元素,因为索引是基于0的,并且项的长度是元素count,a[len(a)-1]
将是最后一项。
顺便说一下,通常,访问允许数字索引(str,list,tuple等)的对象中的最后一个元素的正确方法是使用a[-1]
。显然,这不涉及len
。
答案 1 :(得分:2)
使用len
if len(a) <= index:
...
注意:您的问题会询问您如何找出“如果a[4]
为空”。 a[4]
不是什么,这就是为什么当你尝试检查它时会得到IndexError
。
答案 2 :(得分:2)
a[4]
会抛出IndexError
异常,这与将索引4处的a
的值与None
进行比较的情况不同。您可以在列表中包含None
的值,如果您要比较a
的值,那么当您遇到None
时,并不意味着找不到索引在列表中。例如:
>>> a=[1,None,2]
>>> a[1]==None
True
>>> a[3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
由于列表是连续的并且是顺序索引的,因此检查索引是否在列表中的正确方法是将其与列表的len()
进行比较,但是根据应用程序,还有其他方法可以解决它,比如捕捉IndexError
或迭代。
>>> for index, value in enumerate(a):
... print index, value
...
0 1
1 None
2 2
答案 3 :(得分:2)
您可以编写一个与dict.get()类似的函数用于词典:
def listget(list_, index, default=None):
"""Return the item for index if index is in the range of the list_,
else default. If default is not given, it defaults to None, so that
this method never raises an IndexError."""
if index >= len(list_) or index < -len(list_):
return default
else:
return list_[index]
使用示例:
>>> names = ["Mark","Frank","James"]
>>> listget(names, 2)
'James'
>>> listget(names,-3)
'Mark'
>>> listget(names,3) # returns None
>>> listget(names,4,0)
0
所以它总会返回一个值而你没有例外。
答案 4 :(得分:2)
这是我在Code Fights的一个街机挑战中应用的一种方法。
基本上,列表的结尾由以下内容定义:
#!/usr/bin/python3
numbers = [1, 3, 5, 8, 10, 13, 16]
list_len = len(numbers)
for n in numbers:
current_idx = numbers.index(n)
print("Current Number:", numbers[current_idx])
list_end = list_len - current_idx
if list_end != 1:
next_idx = current_idx + 1
print("Next Number: ", numbers[next_idx])
else:
print("End Of List!")
答案 5 :(得分:1)
您没有提供特定的用例,但通常会针对列表使用len
来查看列表中有多少元素。
if len(a) > 3:
# Do something
答案 6 :(得分:1)
检查您当前是否正在查看列表末尾的元素(使用任何语言)的一般方法是将您正在查看的当前索引与列表长度减去1进行比较(因为索引)从0开始。
a[4]
实际上并不是什么,因为它不存在 - 某些语言可能会将其实现为null(或未定义),但是如果您尝试访问它,很多语言只会抛出异常。
答案 7 :(得分:1)
a = [1,2,3]
:
a [2:3] [3]
a [3:4] 是 []
所以 a [i:i + 1]!= [] 告诉我是否是 a 的索引
a [i:] 也是如此,但 a [i:] 创建了另一个列表,可能很长,而 a [i:i + 1] 是1个元素,如果不是空的
答案 8 :(得分:0)
这是我用来检查列表末尾是否已到达的逻辑语句:
<!-- With paddings: WON'T WORK IN ALL EMAIL CLIENTS! -->
<table>
<tr>
<!--use paddings-->
<td style="padding: 10px 10px 10px 10px">
<!--Content goes here-->
</td>
</tr>
</table>
<!-- Same result with borders. Same color of your background -->
<table>
<tr>
<!--use border same color of bg-->
<td style="border: solid 10px #ffffff">
<!--Content goes here-->
</td>
</tr>
</table>
<!-- Same result using empty td/tr. (A lot more html than borders, get messy on large emails) -->
<table>
<tr>
<td colspan="3" height="10" style="height: 10px; line-height: 1px"> </td>
</tr>
<tr>
<td width="10" style="width: 10px; line-height: 1px"> </td>
<td>
<!--Content goes here-->
</td>
<td width="10" style="width: 10px; line-height: 1px"> </td>
</tr>
<tr>
<td colspan="3" height="10" style="height: 10px; line-height: 1px"> </td>
</tr>
</table>
希望这有帮助! :)
答案 9 :(得分:0)
在这里查看: https://www.geeksforgeeks.org/python-how-to-get-the-last-element-of-list/
test_list = [1, 4, 5, 6, 3, 5]
# printing original list
print ("The original list is : " + str(test_list))
# First naive method
# using loop method to print last element
for i in range(0, len(test_list)):
if i == (len(test_list)-1):
print ("The last element of list using loop : "+ str(test_list[i]))
# Second naive method
# using reverse method to print last element
test_list.reverse() `enter code here`
print("The last element of list using reverse : "+ str(test_list[0]))