簡體   English   中英

Python:如何在具有組的列表中查找特定元素?

[英]Python: How to find out specific elements in a list with groups?

我從網站上提取了以下列表,並且能夠按價格和項目對列表進行排序:

['ITEM 1','155.80EUR','需要'],['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','需要'],['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','需要'],['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']

...

現在,我需要找出那些元素,其中包括“需要”和最便宜的元素。 因此,對於此示例,我需要的輸出將是:

['ITEM 1','155.80EUR','需要'],['ITEM 3','246.05EUR','需要'],

我真的堅持了這一點,因此,對於如何解決此問題的任何想法將不勝感激。

如果可以將列表構造為列表列表:

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']

您可以使用更少的代碼行來完成此操作,具體取決於您的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']]

暫無
暫無

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

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