gpt4 book ai didi

python - 循环 Python 子列表同时使它们增长的最有效方法(插入方法)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:33 25 4
gpt4 key购买 nike

我的问题是关于在循环内管理插入/追加方法。

我有两个长度为 N 的列表:第一个(我们称之为 s )表示一个子集,而第二个表示数量 x我想评估。为了简单起见,假设每个子集都存在 T 个元素。

cont = 0;
for i in range(NSUBSETS):
for j in range(T):
subcont = 0;
if (x[(i*T)+j] < 100):
s.insert(((i+1)*T)+cont, s[(i*T)+j+cont]);
x.insert(((i+1)*T)+cont, x[(i*T)+j+cont]);
subcont += 1;
cont += subcont;

在循环遍历两个列表的所有元素时,我希望当满足特定条件(例如 x[i] < 100 )时,将该元素的副本放在子集的末尾,然后继续继续循环,直到完成对子集的所有原始成员的分析。保持“顺序”很重要,即将元素插入它来自的子集的最后一个元素旁边。

我认为一种方法可能是在 2 个计数器变量中分别存储在子集内和全局范围内制作的副本数(参见代码):这样,我可以根据以下内容移动我正在查看的元素的索引那。我想知道是否存在一些更简单的方法来做到这一点,也许使用一些 Python 魔法。

最佳答案

如果您的想法是将您的额外副本插入到列表中而不制作整个列表的完整副本,您可以尝试使用 generator expression .当您遍历列表时,收集您要追加的匹配项。在处理每个项目时产生每个项目,然后也产生每个收集的项目。

这是一个只有一个列表的简化示例,但希望它能说明这个想法。如果您像我所做的那样并通过理解扩展生成器,您只会得到一份副本。如果您只是想存储或进一步分析处理后的列表(例如,将其写入磁盘),则根本无法将其保存在内存中。

def append_matches(input_list, start, end, predicate):
# where predicate is a filter function or lambda
for item in input_list[start:end]:
yield item
for item in filter(predicate, input_list[start:end]):
yield item

example = lambda p: p < 100
data = [1,2,3,101,102,103,4,5,6,104,105,106]

print [k for k in append_matches (data, 0, 6, example)]
print [k for k in append_matches (data, 5, 11, example)]

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

关于python - 循环 Python 子列表同时使它们增长的最有效方法(插入方法)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16818616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com