亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據列表值定期迭代列表

根據列表值定期迭代列表

MM們 2023-10-11 20:13:55
我一直在嘗試以幾種不同的方式來實現這一目標,但似乎不太適合我。我正在嘗試迭代塊中的列表,其中第一個索引值是第一個塊中有多少元素的整數。之后,另一個具有 n 個元素的整數,以及另一個,依此類推。例子:test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']我想讀取 3,從列表中取出“a”、“b”、“c”并對它們執行一些操作。然后返回到 2 處的列表,拉出 'd'、'e' - 更多操作等?;蛘呱踔林皇褂谜麛挡鸱譃樽恿斜硪部梢浴N艺诳紤]使用更新的 [start:stop:step] 變量進行列表切片,但無法將其組合在一起。有什么建議么?只能使用標準Python庫。
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

在列表上使用迭代器使這變得非常簡單。只需抓取下一個項目,它會告訴您接下來還要抓取多少,依此類推,直到列表末尾:

test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']


it = iter(test)

for num in it:

? ? print(", ".join(next(it) for _ in range(num)))

打?。?/p>


a, b, c

d, e

f, g, h

如果需要保存結果,您還可以將其轉換為列表:


>>> it = iter(test)

>>> [[next(it) for _ in range(num)] for num in it]

[['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h']]


查看完整回答
反對 回復 2023-10-11
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

您可以創建一個生成器來延遲迭代列表的各個部分:


test = [3, 'a', 'b', 'c', 2, 'd', 'e', 3, 'f', 'g', 'h']

def parts(lst):

    idx = 0

    while idx < len(lst):

        part_length = lst[idx]

        yield lst[idx+1: idx + part_length + 1 ]

        idx += part_length+1

        

for part in parts(test):

    print(part)

輸出:


['a', 'b', 'c']

['d', 'e']

['f', 'g', 'h']


查看完整回答
反對 回復 2023-10-11
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

如果您的輸入結構總是這樣,您可以執行以下操作:


result = [test[i:i+j] for i, j in enumerate(test, 1) if isinstance(j, int)]

print(result)


# [['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h']]


查看完整回答
反對 回復 2023-10-11
  • 3 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號