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

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

如何將列表中的所有元素每第 N 個項目擴展到另一個列表

如何將列表中的所有元素每第 N 個項目擴展到另一個列表

Helenr 2023-08-08 17:06:56
我正在嘗試找到一種方法,將列表中的所有元素插入另一個列表的每個第 n 個元素。有幾個類似的帖子,但它們是針對一個列表的單個元素到另一個列表的。我想弄清楚的是采取以下列表:l1 = ["a","b"]l2 = ["j","k","l","m","n","o","p","q","r","s","t"u"]并將它們一起輸出:["j","k","l","a","b","m","n","o","a","b","p","q","r","a","b","s","t","u"]我認為行之有效的方法至少是這樣開始的:for x in 1st:    for i in range(len(l2)):        2nd.extend(l1)我知道這行不通,但我不知道如何實施。在上面的特定輸出中,第一個列表添加到每第三個元素之后。它不必是每三個元素,但我只是用它作為例子。有人可以教我如何做到這一點嗎?編輯: 在@Chris的幫助下,我找到了一個名為的第三方庫more_itertools,并創建了一個新代碼,它完全符合我的要求。這是我想出的:import more_itertools as mitl1 = ["a","b"]l2 = ["j","k","l","m","n","o","p","q","r","s","t","u"]#We will place the elements of 1st after every two elements of 2nd l3 = list(mit.collapse(mit.intersperse(l1, l2, n=len(l1))))結果:>>> print(l3)['j', 'k', 'a', 'b', 'l', 'm', 'a', 'b', 'n', 'o', 'a', 'b', 'p', 'q', 'a', 'b', 'r', 's', 'a', 'b', 't', 'u']我發現該intersperse函數將允許用戶將元素以“第 n”間隔放置到單獨的列表中。在此示例中,我將 l1 列表放置在 l2 列表中的每隔一個元素之后(因為 len(l1) 等于 2)。該collapse函數將獲取放置在 l2 中的列表,并將每個元素作為單獨的元素按順序排列。感謝所有在這方面幫助過我的人。我喜歡學習新東西。
查看完整描述

5 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

numpy 能夠將列表拆分為均勻分布的較小列表。您可以在np.array_split列表本身中指定拆分數量。n在這里,我使用 math.floor 來獲取該值進入列表長度的偶數次。在本例中,n=3列表有 12 個元素,因此它將返回 4 作為結果子列表的數量。


該[np.append(x,l1) for x....部分表示將 l1 中的值附加到每個子列表的末尾。并將chain_from_iterable它們全部混合在一起,您可以將其呈現為列表list()。


l1它還有在最后添加值的副作用,如果您不想這樣做,可以使用切片來刪除最后一個n值,其中n是列表的長度l1。


import numpy as np

import itertools

import math


n = 3

l1 = ["a","b"]

l2 = ["j","k","l","m","n","o","p","q","r","s","t","u"]

list(itertools.chain.from_iterable([np.append(x, l1) for x in np.array_split(l2,math.floor(len(l2)) / n)]))

或者如果您不想尾隨附加:


list(itertools.chain.from_iterable([np.append(x, 

                                              l1) for x in np.array_split(l2,

                                                                          math.floor(len(l2)) / n)]))[:-len(l1)]



查看完整回答
反對 回復 2023-08-08
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

list3 = []

n = 3


for x in range(1, len(list2)+1):

    if x%n == 0 and x != len(list2):

        list3.append(list2[x-1])

        for y in list1:

            list3.append(y)

    else:

        list3.append(list2[x-1])


print(list3)


查看完整回答
反對 回復 2023-08-08
?
泛舟湖上清波郎朗

TA貢獻1818條經驗 獲得超3個贊

只需迭代列表 b 的每個第 n 個元素并插入列表 a 的每個迭代即可。


    a = ["a", "b"]

    b = ["j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u"]

    

    n = 3  # where you want to insert

    

    while n < len(b):

        for i in range(len(a)):

            b.insert(n, a[i])

            n += 1  # increment n by 1 so 'b' insert after 'a'

        n += 3  # increment n by 3 every iteration to insert list a

    

    print(b)

結果:['j', 'k', 'l', 'a', 'b', 'm', 'n', 'o', 'a', 'b', 'p', 'q' , 'r', 'a', 'b', 's', 't', 'u']


查看完整回答
反對 回復 2023-08-08
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

list1= ["a","b"]

list= ["j","k","l","m","n","o","p","q","r","s","t","u"]

d=[]

for i in list:

    print(list.index(i))

    if ((list.index(i)+1)%3==0 and list.index(i)!=0):

        d.append(i)

        d.extend(list1)


    else:

        d.append(i)

print(d)


查看完整回答
反對 回復 2023-08-08
?
手掌心

TA貢獻1942條經驗 獲得超3個贊

one = ["a","b"]

two = ["j","k","l","m","n","o","p","q","r","s","t","u"]


start =0

end = 3 #or whatever number you require

complete_list=[]

iterations = int(len(two)/3)

for x in range(iterations):

    sub_list= two[start:end]   

    start = start+3

    end= end+3

    complete_list.append(sub_list)

    if x < iterations-1:

        complete_list.append(one)

complete_list = flatten(complete_list)

可能有更短版本的代碼可以執行此操作,但這也可以工作。


查看完整回答
反對 回復 2023-08-08
  • 5 回答
  • 0 關注
  • 251 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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