Учитывая возвращаемую двоичную строку, позиция 000 находится в позиции 0, 001 - в позиции 1. В функции - PullRequest
2 голосов
/ 02 апреля 2019

Учитывая список, который имеет какое-то значение, такое как [0,0,0]

Я хочу определить его положение, и под этим я подразумеваю:

000
001
010
011
100
101
110
111

позиция0. Если бы это было 010, то позиция равна 2. Если бы это была 101, то это позиция 5. В основном считайте от 0, пока вы не окажетесь на позиции.Было бы легко жестко закодировать это, если бы это было только три значения.

Но скажите, что мне дано [1,0,0,0] или больше.Есть ли тривиальный способ получить свою позицию?

def binposition(L):
    pass

Не уверен, как начать

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Вы можете преобразовать строку, содержащую вашу двоичную позицию, в целое число, а затем использовать ее в качестве индекса вашего списка:

def binposition(binary_position, L):
    return L[int(binary_position, 2)]

Примеры:

>>> L = list(range(10))
>>> binposition('111', L)
7
>>> binposition('101', L)
5

Вы можететакже расширьте класс list и определите метод __getitem__ следующим образом:

class L(list):
    def __getitem__(self, key):
        return list.__getitem__(self, int(key, 2))

>>> l = L()
>>> l.extend(list(range(10)))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> l['111']
7
>>> l['001']
1
0 голосов
/ 02 апреля 2019

Вы можете отобразить двоичные числа в L в строку, чтобы вы могли использовать конструктор int, чтобы преобразовать его в строку типа 2:

def binposition(L):
    return int(''.join(map(str, L)), 2)

так что binposition([1, 0, 1, 1]) возвращает: 11

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...