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

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

查找元組中下一個元素的最有效方法

查找元組中下一個元素的最有效方法

慕容708150 2021-03-29 12:50:51
我有一個系統,在該系統中我經常(但不是經常)必須在元組中查找下一個項目。我目前正在這樣做:mytuple = (2,6,4,8,7,9,14,3)currentelement = 4def f(mytuple, currentelement):    return mytuple[mytuple.index(currentelement) + 1]nextelement = f(mytuple, currentelement)所有元素都是唯一的,并且我不受元組的困擾,如果需要的話,我可以在程序的更早版本中添加它。由于我需要做很多事情,所以我想知道是否有更有效的方法來做到這一點?
查看完整描述

2 回答

?
慕婉清6462132

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

這里使用一個字典,類型的字典提供O(1)查詢相比,list.index這是一個O(N)操作。


這也適用于字符串。


>>> lis = (2,6,4,8,7,9,14,3)

>>> dic = dict(zip(lis, lis[1:]))

>>> dic[4]

8

>>> dic[7]

9

>>> dic.get(100, 'not found') #dict.get can handle key errors

'not found'

創建上述命令的內存有效版本:


>>> from itertools import izip

>>> lis = (2,6,4,8,7,9,14,3)

>>> it1 = iter(lis)

>>> it2 = iter(lis)

>>> next(it2)

2

>>> dict(izip(it1,it2))

{2: 6, 4: 8, 6: 4, 7: 9, 8: 7, 9: 14, 14: 3}


查看完整回答
反對 回復 2021-04-02
?
慕萊塢森

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

您可能希望使用字典來建立索引:


# The list

>>> lis = (2,6,4,8,7,9,14,3)


# build the index

>>> index = dict(zip(lis, range(len(lis))))

>>> index

{2: 0, 3: 7, 4: 2, 6: 1, 7: 4, 8: 3, 9: 5, 14: 6}


# Retrieve position by using the index

>>> index[6]

1

>>> lis[index[6]+1]

4

如果列表隨時間變化,則必須重建索引。對于更有效的內存解決方案,您可能更喜歡使用izip其他答案中建議的而不是“ zip”。


查看完整回答
反對 回復 2021-04-02
  • 2 回答
  • 0 關注
  • 313 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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