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

如何用Python按规则从P、C、storage_i生成列表R?能否用append?

问题描述

如何使用Python编写代码,按照给定规则从整数集合P、C以及索引集合storage_i生成输出列表R?是否可以使用append方法实现类似如下链式调用?

X.append(A[6]).append(B[1]).append(A[2]) 

若不可行,有什么替代方案?

相关集合

P = [1, 2, 3, 4, 5, 6]
C = [101, 102, 103, 104, 105, 106]

注:P[1]指P的第一个元素1(非Python默认的0起始索引)

索引规则

storage_i是用于从P或C中选取元素生成R的索引集合,选取顺序固定为P->C->P->C->P,依次取用storage_i中的对应索引。

storage_i = [[6, 1, 2],
 [6, 1, 3],
 [6, 1, 4],
 [6, 1, 5],
 [6, 2, 3],
 [6, 2, 4],
 [6, 2, 5],
 [6, 3, 4],
 [6, 3, 5],
 [6, 4, 5],
 [1, 2, 3],
 [1, 2, 4],
 [1, 2, 5],
 [1, 3, 4],
 [1, 3, 5],
 [1, 4, 5],
 [2, 3, 4],
 [2, 3, 5],
 [2, 4, 5],
 [3, 4, 5],
 [6, 1, 2, 3, 4],
 [6, 1, 2, 3, 5],
 [6, 1, 2, 4, 5],
 [6, 1, 3, 4, 5],
 [6, 2, 3, 4, 5],
 [1, 2, 3, 4, 5]]

目标R结构

R =  [[P[6], C[1], P[2]],
 [P[6], C[1], P[3]],
 [P[6], C[1], P[4]],
 [P[6], C[1], P[5]],
 [P[6], C[2], P[3]],
 [P[6], C[2], P[4]],
 [P[6], C[2], P[5]],
 [P[6], C[3], P[4]],
 [P[6], C[3], P[5]],
 [P[6], C[4], P[5]],
 [P[1], C[2], P[3]],
 [P[1], C[2], P[4]],
 [P[1], C[2], P[5]],
 [P[1], C[3], P[4]],
 [P[1], C[3], P[5]],
 [P[1], C[4], P[5]],
 [P[2], C[3], P[4]],
 [P[2], C[3], P[5]],
 [P[2], C[4], P[5]],
 [P[3], C[4], P[5]],
 [P[6], C[1], P[2], C[3], P[4]],
 [P[6], C[1], P[2], C[3], P[5]],
 [P[6], C[1], P[2], C[4], P[5]],
 [P[6], C[1], P[3], C[4], P[5]],
 [P[6], C[2], P[3], C[4], P[5]],
 [1, 102, 3, 104, 5]]

预期结果

R =  [[6, 101, 2],
 [6, 101, 3],
 [6, 101, 4],
 [6, 101, 5],
 [6, 102, 3],
 [6, 102, 4],
 [6, 102, 5],
 [6, 103, 4],
 [6, 103, 5],
 [6, 104, 5],
 [1, 102, 3],
 [1, 102, 4],
 [1, 102, 5],
 [1, 103, 4],
 [1, 103, 5],
 [1, 104, 5],
 [2, 103, 4],
 [2, 103, 5],
 [2, 104, 5],
 [3, 104, 5],
 [6, 101, 2, 103, 4],
 [6, 101, 2, 103, 5],
 [6, 101, 2, 104, 5],
 [6, 101, 3, 104, 5],
 [6, 102, 3, 104, 5],
 [1, 102, 3, 104, 5]]

解答

链式append的可行性说明

你提到的X.append(A[6]).append(B[1])这种链式调用不可行。因为Python中列表的append()方法返回值为None,而非列表本身,在None上调用append()会直接抛出AttributeError。

替代实现方案

根据规则,我们可以通过遍历storage_i的索引组,按P->C->P->C->P的交替顺序选取元素,具体实现步骤如下:

  1. 索引转换:题目中索引为1起始,Python列表为0起始,需将每个索引值减1获取对应元素;
  2. 交替选集合:按索引组内元素的位置(从0开始计数),偶数位置选P,奇数位置选C;
  3. 生成子列表并收集到R中。

实现代码

# 定义原始集合
P = [1, 2, 3, 4, 5, 6]
C = [101, 102, 103, 104, 105, 106]
storage_i = [[6, 1, 2],
 [6, 1, 3],
 [6, 1, 4],
 [6, 1, 5],
 [6, 2, 3],
 [6, 2, 4],
 [6, 2, 5],
 [6, 3, 4],
 [6, 3, 5],
 [6, 4, 5],
 [1, 2, 3],
 [1, 2, 4],
 [1, 2, 5],
 [1, 3, 4],
 [1, 3, 5],
 [1, 4, 5],
 [2, 3, 4],
 [2, 3, 5],
 [2, 4, 5],
 [3, 4, 5],
 [6, 1, 2, 3, 4],
 [6, 1, 2, 3, 5],
 [6, 1, 2, 4, 5],
 [6, 1, 3, 4, 5],
 [6, 2, 3, 4, 5],
 [1, 2, 3, 4, 5]]

R = []
for indices in storage_i:
    sub_list = []
    for idx_pos, num in enumerate(indices):
        # 偶数位置选P,奇数位置选C,转换为0起始索引
        if idx_pos % 2 == 0:
            sub_list.append(P[num - 1])
        else:
            sub_list.append(C[num - 1])
    R.append(sub_list)

# 打印验证结果
for item in R:
    print(item)

代码说明

  • 外层循环遍历storage_i中的每个索引组;
  • 内层循环通过enumerate获取元素的位置和值,根据位置奇偶性选择对应集合,并完成1起始到0起始的索引转换;
  • 每个索引组处理后生成的子列表添加到R中,最终得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:35:20