[英]Find matching elements in one array
我有一個看起來像這樣的對象列表:
Bidder - Timestamp: 11, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.20 -- missed
Bidder - Timestamp: 13, User ID: 13, Action: BID, Loan ID: 430, Rate: 0.15
Bidder - Timestamp: 17, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.10 -- miss
Bidder - Timestamp: 18, User ID: 1, Action: BID, Loan ID: 431, Rate: 0.15
Bidder - Timestamp: 19, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14
Bidder - Timestamp: 21, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14
我正在嘗試查找所有匹配的User ID
但是這樣做很麻煩,我的代碼遇到的問題是我最終錯過了上面顯示的一個匹配ID
。
這是我當前擁有的代碼,該代碼獲取第一個元素並將其與下一個元素進行比較:
self._bidders = [] # List of bidders
for idx, firstElement in enumerate(self._bidders):
FirstElement = firstElement
NextElement = self._bidders[(idx + 1) % len(self._bidders)]
if FirstElement.user_id == NextElement.user_id:
#Do something
我將如何確保獲得所有匹配的User ID
而不丟失任何信息,並且不使用任何導入?,任何建議/幫助將不勝感激。
這是一種將對象列表轉換為數據框的方法,然后您可以從中輕松找到匹配項:
# Create a list of lists
data = ['Bidder - Timestamp: 11, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.20',
'Bidder - Timestamp: 13, User ID: 13, Action: BID, Loan ID: 430, Rate: 0.15',
'Bidder - Timestamp: 17, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.10',
'Bidder - Timestamp: 18, User ID: 1, Action: BID, Loan ID: 431, Rate: 0.15',
'Bidder - Timestamp: 19, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14',
'Bidder - Timestamp: 21, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14']
df = pd.DataFrame([d.split(',') for d in data])
# df = pd.DataFrame([list(d).split(',') for d in data]) # Use this for your list of objects
df2 = pd.DataFrame()
for i in range(len(df.columns)):
name = df.iloc[:,i].str.split(':', expand=True)[0][0].strip()
values = df.iloc[:,i].str.split(':', expand=True)[1].str.strip()
df2[name] = values
print(df2)
Bidder - Timestamp User ID Action Loan ID Rate
0 11 8 BID 430 0.20
1 13 13 BID 430 0.15
2 17 8 BID 430 0.10
3 18 1 BID 431 0.15
4 19 3 BID 431 0.14
5 21 3 BID 431 0.14
# Find matches
df2[df2['User ID'] == '8']
Bidder - Timestamp User ID Action Loan ID Rate
0 11 8 BID 430 0.20
2 17 8 BID 430 0.10
試試這個,for循環:
data = ['Bidder - Timestamp: 11, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.20',
'Bidder - Timestamp: 13, User ID: 13, Action: BID, Loan ID: 430, Rate: 0.15',
'Bidder - Timestamp: 17, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.10',
'Bidder - Timestamp: 18, User ID: 1, Action: BID, Loan ID: 431, Rate: 0.15',
'Bidder - Timestamp: 19, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14',
'Bidder - Timestamp: 21, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14']
l = [[i.split(':')[0].strip() for i in data[0].split(',')]]
for i in data:
l.append([x.split(':')[1].strip() for x in i.split(',')])
或單線列表理解:
data = ['Bidder - Timestamp: 11, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.20',
'Bidder - Timestamp: 13, User ID: 13, Action: BID, Loan ID: 430, Rate: 0.15',
'Bidder - Timestamp: 17, User ID: 8, Action: BID, Loan ID: 430, Rate: 0.10',
'Bidder - Timestamp: 18, User ID: 1, Action: BID, Loan ID: 431, Rate: 0.15',
'Bidder - Timestamp: 19, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14',
'Bidder - Timestamp: 21, User ID: 3, Action: BID, Loan ID: 431, Rate: 0.14']
l = [[i.split(':')[0].strip() for i in data[0].split(',')]] + [[x.split(':')[1].strip() for x in i.split(',')] for i in data]
您可以使用字典來首先存儲ID在列表中出現的次數。 然后,您可以根據ID是否重復來過濾原始列表:
bidders = [
Bidder(11, 8, 'BID', 430, 0.20),
Bidder(13, 13, 'BID', 430, 0.15),
Bidder(17, 8, 'BID', 430, 0.10),
Bidder(18, 1, 'BID', 431, 0.15),
Bidder(19, 3, 'BID', 431, 0.14),
Bidder(21, 3, 'BID', 431, 0.14)
]
id_counts = {}
for b in bidders:
if b.user_id in id_counts:
id_counts[b.user_id] += 1
else:
id_counts[b.user_id] = 1
result = [b for b in bidders if id_counts[b.user_id] > 1]
print(result)
產量
[Timestamp: 11, User Id: 8, Action: BID, Loan ID: 430, Rate: 0.2,
Timestamp: 17, User Id: 8, Action: BID, Loan ID: 430, Rate: 0.1,
Timestamp: 19, User Id: 3, Action: BID, Loan ID: 431, Rate: 0.14,
Timestamp: 21, User Id: 3, Action: BID, Loan ID: 431, Rate: 0.14]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.