python 原始列表中的元组列表

stszievb  于 2022-12-21  发布在  Python
关注(0)|答案(5)|浏览(186)

我有一张名单
并希望创建一个新的对列表,如下所示:

[(7,63),(64,131),(132,182),(183,507),(508,659),(660,669)]

当我使用下面的代码:

list = [6, 63, 131, 182, 507, 659, 669]
line_num = 0
for idx,i in enumerate(list):
    print(list[idx]+1,list[idx+1])

我得到以下错误:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
      5     pass
      6 else:
----> 7     print(city_index[idx]+1,city_index[idx+1])

IndexError: list index out of range

我如何在得到错误之前结束循环?

unhi4e5o

unhi4e5o1#

可以考虑使用zip,这可以让您不必担心列表索引(在大多数情况下)。

lst = [6, 63, 131, 182, 507, 659, 669]

for x, y in zip(lst, lst[1:]):
    print(x+1, y)

如果您不喜欢创建lst的浅层副本,请改用itertools.islice

from itertools import islice

lst = [6, 63, 131, 182, 507, 659, 669]

for x, y in zip(lst, islice(lst, 1, None)):
    print(x+1, y)

或者,使用Python 3.10中引入的itertools.pairwise

for x, y in pairwise(lst):
    print(x+1, y)
gmol1639

gmol16392#

使用切片,它返回消息的所有内容,除了最后一个元素ie:-1

list = [6, 63, 131, 182, 507, 659, 669]
line_num = 0
for idx,i in enumerate(list[:-1]):
    print(list[idx]+1,list[idx+1])
pgvzfuti

pgvzfuti3#

l = [6, 63, 131, 182, 507, 659, 669]
new_l = []
for i in range(1, len(l)):
    new_l.append((l[i-1] + 1, l[i]))
print(new_l)

输出:

[(7, 63), (64, 131), (132, 182), (183, 507), (508, 659), (660, 669)]
bbuxkriu

bbuxkriu4#

循环直到list的长度为-1,以避免超出范围:

lst = [6, 63, 131, 182, 507, 659, 669]

pairs = []
for i in range(len(lst)-1):
    pairs.append((lst[i]+1, lst[i+1]))
4nkexdtk

4nkexdtk5#

nums = [6, 63, 131, 182, 507, 659, 669]
pairs = [(nums[i] + 1, nums[i + 1]) for i in range(len(nums) - 1)]

你可以在列表解析中这样做,并在len(nums) - 1而不是len(nums)处停止循环,你可能不想调用变量list,因为list在python中是一个特殊的词。

相关问题