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

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

對元組列表進行排序實際上并沒有對它們進行排序

對元組列表進行排序實際上并沒有對它們進行排序

哈士奇WWW 2023-08-15 17:09:38
假設我有一本這樣的字典:a = {1:"a", 3:"c", 5:"e", 4:"d" ,2:"b", 6:"f", 7:"g"}我將其轉換為元組列表:b = list(a.items())現在,我想根據元組的第一個值對列表進行排序。我有三種方法可以做到這一點:from operator import itemgetterb.sort(key=itemgetter(0))b.sort(key=lambda x: x[::-1])b = sorted(b, key=lambda t: (t[0]))無論哪種情況,如果我打印,b我都會得到排序列表:print(b)>>> [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g')]然而,如果我實際b在一個進程中使用,結果發現它沒有排序。我測試了一些東西,但我手頭目前的東西是這樣的:batch_count = len(b) // 3batches = [[] for _ in range(batch_count)]for index, vec in enumerate(b):    batches[index % batch_count].append(vec)這組b列表至少包含 3 個。batches但是,如果我打印,我會從 獲得原始訂單,但預期的情況a除外。7print(batches)>>> [[(1, 'a'), (3, 'c'), (5, 'e'), (7, 'g')], [(2, 'b'), (4, 'd'), (6, 'f')]]有誰知道為什么以及如何防止這種情況?
查看完整描述

3 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

這不是同一個順序。由于 的結果,它被偶數/奇數位置分割index % batch_count。

如果 abatch_count為 2,則有index % 2,它將在0和 之間交替1

>>> [i % 2 for i in range(10)]
[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

最終結果是在第一個子集合中保留偶數位置,在第二個子集合中保留賠率。


查看完整回答
反對 回復 2023-08-15
?
犯罪嫌疑人X

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

您可以使用該grouper函數將列表拆分為大小為 的列表的列表n。


from itertools import zip_longest


def grouper(n, iterable):

    args = [iter(iterable)] * n

    return ([e for e in t if e != None] for t in zip_longest(*args))


b = [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f'), (7, 'g')]

batches = list(grouper(3, b))

print(batches)

輸出:


[[(1, 'a'), (2, 'b'), (3, 'c')], [(4, 'd'), (5, 'e'), (6, 'f')], [(7, 'g')]]


查看完整回答
反對 回復 2023-08-15
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

輸出正常。您可以完全不排序地嘗試一下,看看有什么不同。


batch_count = len(b) // 3

batches = [[] for _ in range(batch_count)]

for index, vec in enumerate(b):

    batches[index % batch_count].append(vec)

根據您的情況從原始列表創建兩個子列表,即偶數和奇數。每一個都已排序。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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