Python中如何将两个列表合并为一个类实例集合?
解决思路与实现方案
看起来你是想遍历两个加密货币列表,将对应(或所有组合)的币对创建成Crypto实例并添加到指定列表里。不过你写的for coin in all_coins["result"] and coin2 in all_coins2["result"]在Python里是语法错误,因为and连接的是两个布尔值,没法直接用来同时遍历两个迭代器。下面分两种常见场景给你提供实现方式:
场景1:生成所有可能的币对组合(笛卡尔积)
如果想让第一个列表里的每个币,都和第二个列表里的每个币配对(比如列表A有[BTC, ETH],列表B有[USDT, USDC],生成BTC-USDT、BTC-USDC、ETH-USDT、ETH-USDC),可以用嵌套循环或者itertools.product来简化:
方法1:嵌套for循环
specifiedlist = [] # 遍历第一个列表的每个coin for coin in all_coins["result"]: # 遍历第二个列表的每个coin2 for coin2 in all_coins2["result"]: specifiedlist.append(Crypto(coin, coin2))
方法2:使用itertools.product(更简洁)
先导入itertools模块,它可以直接生成两个迭代器的笛卡尔积:
import itertools specifiedlist = [Crypto(coin, coin2) for coin, coin2 in itertools.product(all_coins["result"], all_coins2["result"])]
场景2:按索引一一配对
如果两个列表的长度相同,且你想让第i个coin和第i个coin2配对(比如列表A的第1个币对应列表B的第1个币),可以用zip函数:
specifiedlist = [] # zip会将两个列表的元素按索引配对,直到较短的列表遍历完 for coin, coin2 in zip(all_coins["result"], all_coins2["result"]): specifiedlist.append(Crypto(coin, coin2)) # 或者用列表推导式更简洁: specifiedlist = [Crypto(coin, coin2) for coin, coin2 in zip(all_coins["result"], all_coins2["result"])]
注意:如果两个列表长度不一致,zip会以较短的列表为准,忽略较长列表中多余的元素。如果你想保留所有元素(缺失的位置用None填充),可以用itertools.zip_longest替代zip。
内容的提问来源于stack exchange,提问作者Deadmon
相关产品推荐
相关产品推荐

