2017-07-26 77 views
-1

我從網站中提取了以下列表,並且我能夠按價格和物品對列表進行排序:Python:如何找出包含組的列表中的特定元素?

['ITEM 1','155.80EUR','Needed'],['ITEM 1', '164.00EUR'],['ITEM 1','165.30EUR'],['ITEM 1','170.05EUR'],['ITEM 1','174.00EUR'],['ITEM 1','179.00 EURO'],['ITEM 1','179.00EUR'],

['ITEM 2','122.55EUR'],['ITEM 2','129.00EUR','Needed'],['項目2','132.05EUR'],['項目2','136.80EUR'],['項目2','139.00EUR'],['項目2','144.00EUR'],[項目2 ','144.00EUR'],['ITEM 2','144.00EUR'],['ITEM 2','154.00EUR'],['ITEM 2','154.00EUR'],

[''項目3','246 .05EUR','Needed'],['ITEM 3','249.00EUR'],['ITEM 3','250.80EUR'],['ITEM 3','259.00EUR'],['ITEM 3' ,'264.00EUR'],['ITEM 3','264.00EUR'],['ITEM 3','264.00EUR'],['ITEM 3','274.00EUR']

...

現在我需要找出這些元素,其中包括'需要'和是最便宜的。因此,對於這個例子我需要輸出將是:

[ '項目1', '155.80EUR', '所需'],[ '項目3', '246.05EUR', '所需'],

我真的堅持這一點,所以任何想法如何解決這個問題將不勝感激。

+0

[ 「有人可以幫助我?」是不是一個有效的SO問題](https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question)。這通常表明,你需要的是半個小時的時間與當地的導師,或通過一個教程,而不是堆棧溢出。 – Prune

+0

特別是,展示您在攻擊問題時所做的努力和編碼進度。你如何用鉛筆和紙做這件事?你怎麼把它翻譯成代碼?您沒有費力從中間字符串中提取價格,按照產品排列列表,或者解決問題相關的*任何*。 – Prune

+0

爲什麼我應該從中間字符串中提取價格?該列表已使用list.sort(key = operator.itemgetter(0,1))根據產品和價格進行了排列,這與實際問題無關。問題是如果滿足兩個條件(元素包含'needed'且元素是組中第一個地方(在這種情況下,組將是Item1; Item2; Item3)),則從列表中找出元素。所以我在這裏提出問題之前,既沒有看到「能否幫助我」這樣的問題,也沒有找到解決方案的努力。 – Kimsbrand

回答

1

你可以用更少的代碼做到這一點,取決於你的Python編程和水平你想要的可讀性級別。我已經把它分解成逐行的步驟。

order_list = [ 
    ['ITEM 1', '155.80EUR ', 'Needed'], ['ITEM 1', '164.00EUR '], ['ITEM 1', '165.30EUR '], 
    ['ITEM 1', '170.05EUR '], ['ITEM 1', '174.00EUR '], ['ITEM 1', '179.00EUR '], 
    ['ITEM 1', '179.00EUR '], 

    ['ITEM 2', '122.55EUR '], ['ITEM 2', '129.00EUR ', 'Needed'], ['ITEM 2', '132.05EUR '], 
    ['ITEM 2', '136.80EUR '], ['ITEM 2', '139.00EUR '], ['ITEM 2', '144.00EUR '], 
    ['ITEM 2', '144.00EUR '], ['ITEM 2', '144.00EUR '], ['ITEM 2', '154.00EUR '], 
    ['ITEM 2', '154.00EUR '], 

    ['ITEM 3', '246.05EUR ', 'Needed'], ['ITEM 3', '249.00EUR '], ['ITEM 3', '250.80EUR '], 
    ['ITEM 3', '259.00EUR '], ['ITEM 3', '264.00EUR '], ['ITEM 3', '264.00EUR '], 
    ['ITEM 3', '264.00EUR '], ['ITEM 3', '274.00EUR '] 
] 

# Collect items only in a list 
item_list = [line[0] for line in order_list] 
# Collect only distinct items 
product_list = set(item_list) 
print "item list:", item_list 
print "product list:", product_list 

best_order = [] 

# Find the first (cheapest) occurence of each item; 
# See whether it's needed 
for product in product_list: 
    pos = item_list.index(product) 
    line_item = order_list[pos] 
    if 'Needed' in line_item: 
     best_order.append(line_item) 

print best_order 

輸出:

item list: ['ITEM 1', 'ITEM 1', 'ITEM 1', 'ITEM 1', 'ITEM 1', 'ITEM 1', 'ITEM 1', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 2', 'ITEM 3', 'ITEM 3', 'ITEM 3', 'ITEM 3', 'ITEM 3', 'ITEM 3', 'ITEM 3', 'ITEM 3'] 
product list: set(['ITEM 3', 'ITEM 2', 'ITEM 1']) 
[['ITEM 3', '246.05EUR ', 'Needed'], ['ITEM 1', '155.80EUR ', 'Needed']] 
+0

令人驚歎的,謝謝你,並有一個愉快的夜晚! – Kimsbrand

2

如果你可以組織你的列表作爲列表的列表:

l = [ 
     [['ITEM 1', '155.80EUR ', 'Needed'], ['ITEM 1', '164.00EUR '], ['ITEM 1', '165.30EUR '], ['ITEM 1', '170.05EUR '], ['ITEM 1', '174.00EUR '], ['ITEM 1', '179.00EUR '], ['ITEM 1', '179.00EUR ']], 

     [['ITEM 2', '122.55EUR '], ['ITEM 2', '129.00EUR ', 'Needed'], ['ITEM 2', '132.05EUR '], ['ITEM 2', '136.80EUR '], ['ITEM 2', '139.00EUR '], ['ITEM 2', '144.00EUR '], ['ITEM 2', '144.00EUR '], ['ITEM 2', '144.00EUR '], ['ITEM 2', '154.00EUR '], ['ITEM 2', '154.00EUR ']], 

     [['ITEM 3', '246.05EUR ', 'Needed'], ['ITEM 3', '249.00EUR '], ['ITEM 3', '250.80EUR '], ['ITEM 3', '259.00EUR '], ['ITEM 3', '264.00EUR '], ['ITEM 3', '264.00EUR '], ['ITEM 3', '264.00EUR '], ['ITEM 3', '274.00EUR ']] 
    ] 

for item in l: 
    try: 
     if 'Needed' in item[0][2]: 
      print item[0] 
    except IndexError: 
     pass 

輸出:

['ITEM 1', '155.80EUR ', 'Needed'] 
['ITEM 3', '246.05EUR ', 'Needed'] 
相關問題