簡體   English   中英

如何將python列表中的第n個條目彼此添加?

[英]How to add every nth entry in a python list to each other?

假設我有一個python列表:

[4,5,25,60,19,2]

如何將第n個條目彼此添加?

例如,我將列表分為3個條目[4,5 / 25,60 / 19,2],然后添加這些條目以獲取新列表:

[4+25+19, 5+60+2]

這給了我總和:

[48, 67]

對於更復雜的示例,假設我的列表中有2000個條目。 我想將第100個條目添加到之前的條目中,因此在新列表中可以獲得100個條目。 現在,每個條目將是第100個條目的總和。

反復提取您的切片並將其匯總。

>>> [sum(l[i::2]) for i in range(len(l) // 3)]
[48, 67]

您可能需要做更多的工作來處理極端情況,但這對您來說是個不錯的開始。

itertools文檔有一個叫做配方功能grouper ,你可以從導入more_itertools (需要手動安裝)或復制粘貼。

它是這樣的:

>>> from more_itertools import grouper
>>> l = [4,5,25,60,19,2]
>>> list(grouper(2, l)) # 2 = len(l)/3
>>> [(4, 5), (25, 60), (19, 2)]

你可以轉的輸出grouperzip和應用sum每個組。

>>> [sum(g) for g in zip(*grouper(2, l))]
>>> [48, 67]

我更喜歡手動擺弄索引。 此外,它還適用於所有可迭代的對象,而不僅僅是列表。 通用迭代器可能不支持索引或切片,但始終能夠生成值流。

使用從此處獲取的chunks函數,您可以編寫以下內容:

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

l = [4,5,25,60,19,2]
print([sum(e) for e in list(chunks(l, 2))])

您可能會使用一系列聰明的列表操作,但我想不到。 因此,相反,我只是做了一個從0到n-1的解析器,並且在列表的范圍內添加了元素,每n行一次。 因此,如果n = 3,則取0、3、6等;否則,取0。 然后1、4、7等-並將其放入輸出列表。

該代碼附在下面。 希望能幫助到你。

list1 = [7, 6, -5.4, 6, -4, 55, -21, 45, 67, -9, -8, -7, 8, 9, 11, 110, -0.8, -9.8, 1.1]
n = 5

list2 = []
sum_elem = 0

for i in range(n):
    sum_elem = 0
    j = i

    while j < len( list1 ):
        sum_elem += list1[j]
        j += n

    list2.append(sum_elem)

print( list2 )

暫無
暫無

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

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