Я пытаюсь прочитать полином в конечном поле GF (2), который в основном равен 1 или 0 для коэффициентов или констант, и единственное число, которое действительно отличает одну часть полинома от другой, - это показатель степени. Но экспонента заканчивает тем, что отмечает только «место» или индекс местоположения в результирующем списке, который затем помечается только как 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.
e = [1 if x in c else 0 for x in xrange(m, -1, -1)]
- person Ashwini Chaudhary   schedule 24.06.2013