python - 加速列表和for循环python
问题描述
我有一个关于如何加速以下代码的问题,我有两个单独的嵌套列表,它们相互比较:
List1 = [['apple', 'banana'], ['kiwi', 'orange'], ['apple','kiwi'], ['blueberry', 'banana'],['coconut','grape']]
List2 = [['kiwi', 'orange', 'coconut'], ['banana','apple','blueberry', 'coconut'], ['banana','orange','grape'],['apple','kiwi'],['blueberry']]
def smoothies(List1, List2):
if "banana" in List1 and "coconut" in List2:
result = 'Smoothie1'
elif "kiwi" in List1 and 'banana' in List2:
result = 'Smoothie2'
elif 'apple' in List1 and 'grape' in List2:
result = 'Smoothie3'
elif 'blueberry' in List1 and 'apple' in List2:
result = 'Smoothie4'
elif 'grape' in List1 and 'blueberry' in List2:
result = 'Smoothie5'
else:
result = 'None'
return result
这个想法是比较两个列表的所有潜在组合,并将所有选项附加到一个新列表中。如果有人也可以解释为什么这样我可以更好地理解它,那就太好了!谢谢!
解决方案
这个想法是比较两个列表的所有潜在组合,并将所有选项附加到一个新列表中。
对于可变数量的变量,您可以使用字典。
要计算两个列表的成对笛卡尔积,您可以使用itertools.product
with map
。然后使用字典推导来映射唯一组合:
from itertools import chain, product
products = set(chain.from_iterable(map(product, List1, List2)))
res = {smoothie: f'Smoothie{idx}' for idx, smoothie in enumerate(products, 1)}
结果:
{('apple', 'banana'): 'Smoothie7',
('apple', 'coconut'): 'Smoothie3',
('apple', 'grape'): 'Smoothie13',
('apple', 'kiwi'): 'Smoothie2',
('apple', 'orange'): 'Smoothie4',
('banana', 'apple'): 'Smoothie9',
('banana', 'coconut'): 'Smoothie8',
('banana', 'kiwi'): 'Smoothie11',
('banana', 'orange'): 'Smoothie17',
('blueberry', 'apple'): 'Smoothie16',
('blueberry', 'kiwi'): 'Smoothie15',
('coconut', 'blueberry'): 'Smoothie10',
('grape', 'blueberry'): 'Smoothie12',
('kiwi', 'apple'): 'Smoothie21',
('kiwi', 'banana'): 'Smoothie1',
('kiwi', 'blueberry'): 'Smoothie23',
('kiwi', 'coconut'): 'Smoothie22',
('kiwi', 'grape'): 'Smoothie20',
('kiwi', 'orange'): 'Smoothie19',
('orange', 'apple'): 'Smoothie6',
('orange', 'banana'): 'Smoothie18',
('orange', 'blueberry'): 'Smoothie14',
('orange', 'coconut'): 'Smoothie5'}
另一方面,如果您正在寻找跨子列表的所有组合,则可以展平输入列表并product
直接使用。
推荐阅读
- sql-server - 加密存储过程时无法导出 SQL Azure 数据库
- javascript - 使用类实例作为属性的 mobx 存储时未定义的函数
- python - 如何在 Python 中找到图中最大的集团?
- laravel - “只能导入字符串、FileObjects 和 UploadedFileObjects”laravel spatie
- python - 捕获电影标题组
- php - 如何在 PHP Blockcypher 中签署“toSigner”
- c# - ASP NET Web 窗体 URL 重写太慢
- c# - 在 EF Core 中向用户提供默认值并显示
- vue.js - 未重新加载身份验证令牌
- node.js - 如何将参数从控制器传递到预保存中间件?