Python通过对连续元素应用一些规则来创建新列表

2024-10-05 14:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

这个问题让我有些头疼,我正在努力解决它,而不会使事情过于复杂化。我不是在寻找代码,除非有人能引导我找到解决这个问题的最佳方法。 我有这样的数组列表[[1,'A'][3,'B'],[8,'C'],[10,'A']...]等等

每个数组的索引0都是一个总是朝着更高的数值移动的单位,尽管并不总是以相同的增量移动。数组的索引1可以是“A”、“B”或“C”、“D”。我需要的是一个新列表,我将通过应用以下规则将一些数组加入到一个新列表中:

  1. 如果数组列表中至少有三个连续的“B”或“C”,则在新列表中应为“X”,并且我应采用列表中第一个数组的索引0。所以

例如: 如果列表为:

L1 = [[1,'A'],[4,'B'],[6,'C'],[10,'B],[12,'B],[15,'A']

我应该得到L2作为:

[[1,'A'],[4,'X'],[15,'A']
  1. 如果有最小的三对B,A,那么我应该将它们连接起来,并将其标记为Y:

    L1 = [[1,'A'],[4,'B'],[6,'A'],[10,'B'],[12,'A],[15,'B'],[20,'A'],[25,'A']]

L2应为:

[[1,'A'],[4,'Y'],[25,'A']]
  1. 如果连续的B、A、A至少有三个三元组,我应该加入它们并将它们标记为“Z”

因此,如果:

L1 = [[1,'A'],[4,'B'],[6,'A'],[10,'A'],[12,'B],[15,'A'],[16,'A'],[18,'B],[20,'A'],[22,'A'],[25,'A']

L2应为:

[[1,'A'],[4,'Z'],[25,'A']]

所以我(非常机械的)直觉是这样的:

  • 从规则3开始:通过步骤3在L1上迭代,一次获取列表的9个数组,比较每个数组,看看它们是否匹配B、a、a、B、a、a、B、a、模式,然后填写一个新列表,比如L1a。这可能会给我一些重复的Z,我应该再次迭代以“清理”它,并将其放入新的L1b列表中

  • 将规则2应用于L1b,同样的原则,只需执行步骤2,比较列表中的6个数组,如果它们匹配B,A,B,A。这也会给出重复项,我应该清理这些重复项,假设我找到了新的列表L1d

  • 将规则1应用于最后一个列表L1d,按步骤1,同时比较索引1处的3个数组(如果其中有B或C)。这也会让我在新的列表中有很多重复的地方,我应该再次清理

现在,这很可能会起作用,但在我看来,这就像是丑陋的、过于复杂的代码。我觉得必须有一个更简单的方法,但我现在看不到


Tags: 方法代码标记l1列表规则步骤单位