【发布时间】:2016-01-23 13:02:49
【问题描述】:
我正在寻找一种优雅的“Pythonic”方式来循环遍历特定大小的组中的输入。但是组的大小会有所不同,并且在开始解析之前您不知道特定组的大小。
实际上我只关心两种尺寸的组。我有一个很大的输入序列,它们的大小大多是 X,但偶尔大小为 Y。对于这个例子,假设 X=3 和 Y=4(我的实际问题是 X=7 和 Y=8)。直到元素组的中途,我才知道它是一组大小为 X 还是大小为 Y 的元素。
在我的问题中,我正在处理输入行,但为简化起见,我将用字符进行说明。
因此,如果它是一组特定大小的组,我知道我将始终以相同的顺序获得输入。因此,例如,如果它是一个大小 X 组,我将获得类型为 [a,a,b] 的元素,但如果它是一个大小为 Y 组,我将获得类型为 [a,a,c,b] 的元素。如果它是 'a' 类型的东西,我会想以某种方式处理它,而 'b' 另一个等等。
显然,我必须在某个时候测试一个元素,以确定它是属于一类还是另一类。如上所示,我不能只检查每个元素的类型,因为可能有两个相同的序列。此外,这些组在开始时可能是相同的模式,并且仅在接近结束时不同。在这个例子中,我最早可以通过测试第三个元素来检查我是否属于 X 号或 Y 号组(查看它是“c”类型还是“b”类型)。
我有一个带有暴露索引和两个额外变量的 for 循环的解决方案,但我想知道是否有更优雅的解决方案。
这是我的代码。我已将 pass 语句放在我将根据它的类型进行实际解析的位置:
counter = 0
group = 3
for index, x in enumerate("aabaabaacbaabaacbaabaab"):
column = index - counter;
print(str(index) + ", " + x + ", " + str(column))
if column == 0:
pass
elif column == 1:
pass
elif column == 2:
if x == 'c':
pass
elif x == 'd':
group = 4
elif column == 3:
pass
if column + 1 == group:
counter += group
group = 3
在代码示例中,输入流是aabaabaacbaabaacbaabaab,因此是以下组:
- aab (3)
- aab (3)
- aacb (4)
- aab (3)
- aacb (4)
- aab (3)
- aab (3)
【问题讨论】:
-
您能否 a) 给出一个简短的问题描述和 b) 提供一个MCVE?我尝试将您的问题读了三遍,但无法破译问题是什么。
-
基本上我正在使用我知道是两种组的输入序列。当我完成输入时,我将能够确定我是否在一种或另一种组中。虽然我有一些在我当前的解决方案中有效的东西,但我觉得额外的变量可以在 C / Java 风格的循环中使用 case 语句,但在 Python 中感觉很笨重。
标签: python