簡體   English   中英

如何從python中的列表索引獲取列表的子集

[英]how to get subset of list from index of list in python

我有一個字符串列表,我需要以通用方式根據列表列表從列表中進行子集化

indx=[0,5,7] # index list

a = ['a', 'b', 3, 4, 'd', 6, 7, 8]

我需要在第一次迭代中以通用方式獲取子集:

a[0:5]

第二次迭代:

a[5:7]

第3次迭代:

a[7:]

我試過的代碼:

for i in indx:
    if len(indx)==i:
        print(a[i:])
    else:
        print(a[i:i+1])

預期產量:

a[0:5]=='a', 'b', 3, 4, 'd'
a[5:7]=6, 7
a[7:]=8

使用理解:

>>> [a[x:y] for x,y in zip(indx,[*indx[1:], None])]
[['a', 'b', 3, 4, 'd'], [6, 7], [8]]
results = [a[indx[i]:indx[i+1]] for i in range(len(indx)-1)]

將返回包含所需3個列表的列表。

你可以試試這個:

indx.append(len(a))
print(*[a[i:j] for i,j in zip(indx, indx[1:])], sep='\n')

輸出

['a', 'b', 3, 4, 'd']
[6, 7]
[8]

你正好考慮一次迭代兩個項目,但問題是for i in lst中不使用索引,並且會失敗。

迭代和獲取兩個項目的一種方法是使用zip。

indx=[0,5,7] # index list

a = ['a', 'b', 3, 4, 'd', 6, 7, 8]

if indx[0] != 0:
    indx = [0] + indx #fixes left indexing in case 0 is not present
if indx[-1] != len(a):
    indx += [len(a)] #fixes right indexing to make sure you get all values from the list.

print(indx) #[0, 5, 7, 8]
for left, right in zip(indx, indx[1:]):
    print(a[left: right])
#Output:
['a', 'b', 3, 4, 'd']
[6, 7]
[8]

干得好。

for i in range(len(indx)):
try:
    print("a[%s:%s] ==" % (indx[i], indx[i + 1]) + " ", end=" ")
    print(a[indx[i]:indx[i + 1]])
except IndexError:
    print("a[%s:] ==" % (indx[i]) + " ", end=" ")
    print(a[indx[i]:])

輸出:

a[0:5] ==  ['a', 'b', 3, 4, 'd']
a[5:7] ==  [6, 7]
a[7:] ==  [8]

您可以使用slice類型將索引列表轉換為列表切片。 正如其他人已發布的那樣,使用zip創建起始 - 完成對:

>>> print(list(zip(indx, indx[1:]+[None])))
[(0, 5), (5, 7), (7, None)]

我們使用這些對來定義切片:

>>> slices = [slice(a, b) for a, b in zip(indx, indx[1:]+[None])]

然后像使用整數索引一樣使用切片對象,但切片將選擇切片開始 - 結束對中定義的列表子串:

>>> for slc in slices:
...     print(a[slc])

得到:

['a', 'b', 3, 4, 'd']
[6, 7]
[8]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM