<p>下面是简单、清晰、非常符合Python的问题解决方案</p>
<p>我假设价格总是在<code>avail</code>列表中的最后一个位置,项目代码总是在<code>avail</code>和<code>prod</code>列表中的第一个位置。这很明显,但要注意列表的元素顺序</p>
<p><strong>解决方案:</strong></p>
<pre><code>avail = [
['item code', 'phone number', 'price'],
...
]
prod = [
['item code', 'name of product'],
...
]
def best_prices(avail, prod):
# find only items from available with item code present in products
items = [
av for av in avail if any(av[0] == pr[0] for pr in prod)
]
# check if any item is available
if not items:
return None
# sort items by price (ascending) and return first item
return sorted(items, key=lambda x: x[2])[0]
</code></pre>
<p><strong>示例:</strong></p>
<pre><code>>>> prod = [
... ['123456789', '2L 2% Vitali Milk'],
... ]
>>> avail = [
... ['123456789', '7807890123', '2.58'],
... ['123456789', '7804922860', '2.99'],
... ['456392452', '7807890123', '2.11'],
... ]
>>> print(best_prices(avail, prod))
['123456789', '7807890123', '2.58']
</code></pre>
<p>如果返回列表的元素顺序对您来说非常重要(但我不这么认为),您可以重新排序(反转):</p>
<pre><code>def best_prices(avail, prod):
....
return sorted(items, key=lambda x: x[2])[0][::-1]
</code></pre>
<p><strong>奖金:</strong></p>
<p>Extreme one liner完全按照您的预期工作:</p>
<pre><code>>>> print((sorted([a for a in avail if any(a[0] == p[0] for p in prod)], key=lambda x: x[2]) or [None])[0][::-1])
['2.58', '7807890123', '123456789']
</code></pre>
<p>免责声明:在代码中使用这样的一行程序可能不是一个好主意</em></p>