GF(2) 有限体の多項式を読み取ろうとしていますが、これは基本的に係数または定数に対して 1 または 0 のみであり、多項式の 1 つの部分を他の部分と実際に区別する唯一の数値は指数です。しかし、指数は、結果のリスト内の場所の「場所」またはインデックスのみをマークすることになり、1 としてのみマークされます。結果のリスト内の他のすべての位置は 0 です。
例を含むいくつかのコード:
a = "x**14 + x**1 + x**0"
#b = [int(s) for s in a.split() if s.isdigit()]
import re
b = re.findall(r'\d+', a)
print b
c = [int(x) for x in b]
print c
d = []; m = max(c)
print c[1]
for i in range(m):
d.append(0)
# if c[i]>=0: d.insert(i,1)
# else: d.insert(i,0)
for i in c:
del d[i-1]
d.insert(i,1)
#d.insert(m,1);
d.reverse()
print d,len(d)
ご覧のとおり、次のように出力されます。
>>>
['14', '1', '0']
[14, 1, 0]
1
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1] 14
>>>
ただし、リストの先頭に 1 を出力する必要があります (多項式の次数は左から右に高から低になり、リストも同様です)。それが最高度なので、長さは正しいです。私は今、独学で Python を学んでいるので、プロの Python 関係者は私のコードにうんざりしていると思います。プロの方には、初心者の習慣をできるだけ早く取り除こうとしているので、より Pythonic な解決策や建設的な何かを提案してください。後でこれを関数に入れます (実際には、クラス内の関数に入ります)。これは、基本的な考え方を理解するためのものです。
編集:
以下の回答から(コードの一部だけのアイデアを信用していません)、Pythonicのように見えますが、正規表現を使用して抽出してintに変換するコードを最適に統合する方法がわかりません(cリスト内) ):
a = "x**14 + x**1 + x**0"
#b = [int(s) for s in a.split() if s.isdigit()]
import re
b = re.findall(r'\d+', a)
print b
c = [int(x) for x in b]
m = max(c)
e = []
#[e.append(1) if i in c else e.append(0) for i in range(m,-1,-1)]
e = [1 if x in c else 0 for x in xrange(m, -1, -1)] ##better solution
print e
このコードを合理化し、より Pythonic にする方法を考えています。