You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python遍历列表获取公共元素在另一列表索引并生成DataFrame

需求说明

现有两组存储标普500成分股信息的列表,格式如下:

SP500 = ['MSFT', 'AAPL', 'AMZN', 'TSLA', 'GOOGL', 'GOOG', 'FB']
weight500 = [6, 5.9, 3, 2.5, 2.3, 2.1, 2]

另有筛选后的持仓股票代码列表:

portfolio = ['MSFT', 'GOOGL', 'GOOG']

目标是获取portfolio中每只股票在SP500列表的索引值,通过索引匹配对应权重,最终将索引、股票代码、对应权重三类数据存入Pandas DataFrame。

目前已实现单只股票的信息查询,代码如下:

x = input('stock from portfolio:')
index = SP500.index(x)

print(index)        # 输出对应索引
print(x)            # 输出股票代码
print(weight500[index])  # 输出对应权重

# 输入MSFT时输出:
# 0
# MSFT
# 6

也掌握了手动构造三个列表生成DataFrame的方法,需要实现持仓列表的批量遍历、结果自动归集,串联完整流程。

完整实现代码
import pandas as pd

# 基础数据源
SP500 = ['MSFT', 'AAPL', 'AMZN', 'TSLA', 'GOOGL', 'GOOG', 'FB']
weight500 = [6, 5.9, 3, 2.5, 2.3, 2.1, 2]
portfolio = ['MSFT', 'GOOGL', 'GOOG']

# 初始化空列表承接遍历结果
index_list = []
ticker_list = []
weight_list = []

# 批量遍历持仓列表
for ticker in portfolio:
    # 复用已验证的单条查询逻辑
    idx = SP500.index(ticker)
    matched_weight = weight500[idx]
    # 将单条结果追加到对应列表
    index_list.append(idx)
    ticker_list.append(ticker)
    weight_list.append(matched_weight)

# 构造目标DataFrame
df = pd.DataFrame(
    list(zip(index_list, ticker_list, weight_list)),
    columns=['index', 'portfolio', 'weights']
)

print(df)

运行输出结果:

index portfolio  weights
0      0      MSFT      6.0
1      4     GOOGL      2.3
2      5      GOOG      2.1
实现逻辑说明
  • 提前初始化三个空列表,替代手动写死的固定值列表,用来按顺序存储每一次遍历得到的索引、股票代码、权重结果
  • 用for循环遍历持仓列表中的每一个股票代码,循环内部直接复用已经验证可用的单只股票查询逻辑,不需要修改原有查询规则
  • 每计算出一只股票的对应信息,就用列表的append()方法把值添加到对应列表的末尾,遍历完成后三个列表的长度、元素顺序和持仓列表完全一一对应
  • 最后调用zip()方法把三个等长列表打包为元组序列,传入pd.DataFrame即可生成目标结构的表格

大数据量优化提示:如果是完整500只成分股、持仓标的较多的场景,每次调用list.index()都会从头遍历整个SP500列表,查询效率偏低。可以提前构造股票代码到索引、权重的字典映射,把查询复杂度从O(n)降到O(1):

# 提前一次性构造映射字典
ticker_info_map = {ticker: (idx, weight) for idx, (ticker, weight) in enumerate(zip(SP500, weight500))}

# 后续查询直接按键取值,不需要反复遍历列表
# 例如查询MSFT直接调用ticker_info_map['MSFT']即可得到(0, 6)

内容的提问来源于stack exchange,提问作者StayShmacked

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:22:03