我有元组。例如:
set([(('E', ('T',)), 0),
(('F', ('(', 'E', ')')), 0),
(('T', ('F',)), 0),
(('__S__', ('E', '$')), 0),
(('E', ('E', '+', 'T')), 0),
(('T', ('T', '*', 'F')), 0),
(('F', ('id',)), 0)])
如您所见,每个元组都有一个元组作为它的第一个元素(例如('F',('(','E',')')))。
该元组的第一个元素是单个字符,第二个元素是另一个元组(例如('(','E',')')))。该元组中具有一个或多个单个字符。
(实际上是上下文无关语法。第一个元素是rule(head)的LHS,第二个元组是RHS(body)
,每个元组的第二个元素中的数字是指向该语法RHS中字符之一的指针。
我正在尝试我要做的就是根据所指向的元素对元组进行分组
,为此,我编写了以下代码:
import itertools
S = set([(('E', ('T',)), 0), (('F', ('(', 'E', ')')), 0), (('T', ('F',)), 0), (('__S__', ('E', '$')), 0), (('E', ('E', '+', 'T')), 0), (('T', ('T', '*', 'F')), 0), (('F', ('id',)), 0)])
for v, h in itertools.groupby(S, lambda x: x[0][1][x[1]] if len(x[0][1]) > x[1] else None ):
if (v is None):
continue
print '--'
print v
for hi in h:
print hi
如果x [0] [1] [x [1]]相同,则两个元组在同一组中。x [0] [1]是第一个元组的第二个元组(语法的RHS),而x [1]是指针。
我得到以下结果:
--
(
(('F', ('(', 'E', ')')), 0)
--
F
(('T', ('F',)), 0)
--
E
(('__S__', ('E', '$')), 0)
--
T
(('T', ('T', '*', 'F')), 0)
--
id
(('F', ('id',)), 0)
--
T
(('E', ('T',)), 0)
--
E
(('E', ('E', '+', 'T')), 0)
如您所见,有两个键为“ T”的组。我不明白我在做什么错!
我几乎是新的python程序员。万一问题太愚蠢了!
白猪掌柜的
相关分类