【发布时间】:2020-05-29 19:03:07
【问题描述】:
检查列表中的项目是否连续。
[True for x in lst[:-1] for y in lst[1:] if x + 1 == y]
所以列表[1, 2, 3, 4, 5]
返回[True, True, True, True],表示该列表是连续的。
列表[1,2,3,4,4]
返回[True, True, True, True] 表示该列表是连续的,但不是。
为每个语句做证明
lst = [1,2,3,4,4]
def consecutive(lst):
lst.sort()
return [True for x in lst[:-1] for y in lst[1:] if x + 1 == y]
print(consecutive(lst))
some_list = []
for i,j in zip(lst[:-1], lst[1:]):
if i+1 == j:
some_list.append(True)
else:
some_list.append(False)
print(some_list)
我在这里错过了什么?
【问题讨论】:
-
我只是复制了您的代码并运行并得到了您所期望的结果
-
你在 anaconda 上运行了什么?
-
问题是代码使用列表理解做同样的事情,另一个使用“for语句”但输出不同
-
列表理解
[True for ...]不可能返回除了一个充满Trues 的列表之外的任何东西 - 任何其他值从何而来?问题是您没有并行迭代lst[:-1]和lst[1:](您需要zip()来执行此操作),而是循环遍历列表中的每一对值 - 任何包含 N 和N+1 都存在于列表中的某处导致True。 -
FWIW 您可以将整个
if i+1 == j: ...块简化为some_list.append(i+1 == j),然后轻松转换为理解some_list = [i+1 == j for i, j in zip(lst[:-1], lst[1:])]
标签: python python-3.x list list-comprehension