튜플 세트가 있습니다. 예를 들면 : itertools.groupby() in python
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', ')')))). 이 튜플은 하나 이상의 단일 문자를 포함합니다.
첫 번째 요소는 규칙 (머리)의 LHS이고 두 번째 튜플은 RHS (본문)
각 튜플의 두 번째 요소에있는 숫자는이 문법의 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]은 (는) d 튜플 (문법의 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'두 그룹이 볼 수 있듯이. 내가 뭘 잘못하고 있는지 이해가 안돼!
저는 거의 새로운 파이썬 프로그래머입니다. 문제가 너무 어리 석다면!
감사합니다.
는 나는이 대답 할만큼 충분히 코드를 따라 모르겠지만, 문제는 (정렬되지 않은 임)'set'을 사용하고 있는지 생각합니다. 'groupby'에 전달하기 전에 groupby 키 함수를 사용하여 세트를 정렬해야 할 수도 있습니다. – mgilson