python - преобразование списка двухзначных чисел в список двухзначных чисел - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть список из двухсимвольных цепочек чисел, я пытаюсь написать функцию для преобразования этого в список из двухзначных чисел без использования int () или без знания длины списка, это мой код, такдалеко:

intslist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
            19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
            36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
            53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
            70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
            87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

numslist = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',
            '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23',
            '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34',
            '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45',
            '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56',
            '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67',
            '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78',
            '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89',
            '90', '91', '92', '93', '94', '95', '96', '97', '98', '99']

def convert_num(numlist,list1,list2):
    returnlist = []
    templist = []
    convertdict = {k:v for k,v in zip(list1,list2)}
    p = 0
    num = ''.join(numlist)
    for c in num:
        templist.append(convertdict[num[p]])
        p += 2
    for i in templist:
    if templist[i] % 2 == 0:
        returnlist.append()
    return returnlist

это работает, но возвращает только список отдельных цифр, а не те 2 цифры, которые мне нужны.

Я только новичок и не знаю, какпродолжить.Любая помощь приветствуется !!

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Ядро вашего решения будет принимать строку и преобразовывать ее в целое число:

def str_to_int(number):
    return sum((ord(c) - 48) * (10 ** i) for i, c in enumerate(number[::-1]))

Этот метод принимает ваше число, перечисляет его с конца и затем преобразует значение ASCII каждогосимвол в его числовое представление, а затем убедитесь, что он будет занимать правильную цифру в общем числе.

Оттуда вы можете использовать map для преобразования всего списка:

intsList = list(map(str_to_int, numsList))
0 голосов
/ 05 декабря 2018

Очень простое решение:

dd={ str(i):i for i in range(10) } # {"0":0,"1":1,..."9":9}
rslt=[]
for ns in numslist: 
        n=0 
        for i in range(len(ns)): 
            n=10*n+dd[ns[i]] 
        rslt.append(n)
0 голосов
/ 05 декабря 2018

Целое число - это целое число.«Двухзначные целые числа» не существуют в качестве концепции.

Без использования int или len, чтобы вернуть целое число из строки, вы можете перевернуть строку, использовать ord вместо int, умножьте на 10 k и сумму:

x = '84'

res = sum((ord(val)-48)*10**idx for idx, val in enumerate(reversed(x)))  # 84

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

def str_to_int(x):
    return sum((ord(val)-48)*10**idx for idx, val in enumerate(reversed(x)))

res = list(map(str_to_int, numslist))

print(res)

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
 ...
 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...