преобразование числа в список [закрыт]
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.
Закрыт 5 лет назад .
b = 456; c = str(b); x = list(c); z = str(x); a = int(z);
почему невозможно преобразовать int к типу list и обратно в int ? логикеа такая, с int превращает в str, с str в list, а потов в обратном направлении
Отслеживать
задан 24 ноя 2017 в 13:24
117 1 1 золотой знак 1 1 серебряный знак 11 11 бронзовых знаков
а как вы представляете себе преобразование списка в число? Возьмите 0 элемент например.
24 ноя 2017 в 13:27
Думаю для всех очевидно что 0 должен быть пустым списком, а 2 должно быть [1, 0]. 🙂
24 ноя 2017 в 13:28
@Arnial А 3 должно быть [2, 1, 0] или [1, 1]?
24 ноя 2017 в 13:48
что вы ожидаете получить? Приведите явный пример и словами детально опишите
24 ноя 2017 в 13:54
Pero, всё равно непонятно. Вы хотите получить список из цифр числа, записанного в десятичном представлении?
28 ноя 2017 в 8:36
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
z = str(x);
Стоит заменить на
z = ''.join(x)
И что мешает самому написать преобразование?
x = 1234 result = [] while x > 0: result.append(x % 10) x //= 10 result.reverse() print(result) # [1, 2, 3, 4] num = 0 for i, v in enumerate(reversed(result)): num += v * 10 ** i print(num) # 1234
Отслеживать
ответ дан 24 ноя 2017 в 13:51
6,111 3 3 золотых знака 19 19 серебряных знаков 38 38 бронзовых знаков
Вы вероятно хотите, чтобы
list(456) == [4, 5, 6]
int([4, 5, 6]) == 456
Но функция list() работает только с объектами, которые имеют интерфейс iterable , например с множествами , строками , итераторами и генераторами — просто со всем, что может использоваться в цикле for перед двоеточием:
for i in range(10): for i in (2, 3, 5): for i in "abcd":
Теоретически бы могло быть по меньшей мере
list(любый_объект) == [любый_объект]
но ни это не так, потому что бы могли возникнуть проблемы:
i = 456 list(i) # [456] или [i] ? [456] всегда то самое, но [i] меняется с i
С другой стороны, функция int() не может работать со списками — что разумное можно ожидать например от
int(["abc", [3.7, i, (5, 2)], True, (max, 1)]) # .
Осваиваем Python: преобразование строки в число на конкретных примерах
Иногда требуется преобразовать строку в целое число или в число с плавающей точкой для осуществления определённых операций в Python.
Если вы попробуете выполнить то или иное действие со строкой в виде чисел, то получите ошибку.
Этот код приведёт к ошибке :
str_a = ’50’ b = 10 c = str_a + b print (c)
В Python можно использовать функции int и float для преобразования строки в целое число или число с плавающей точкой до осуществления каких-либо операций.
Использование функции int() для преобразования строки в целое число
Рассмотрим следующий код:
str_a = '50' b = 10 c = int(str_a) + b print ("The value of c header-42948-2">Преобразование десятичной строки в число с плавающей точкойМожно использовать класс float для того чтобы осуществить преобразование строки в число с плавающей точкой.
Пример использования float для преобразования строки:
#Пример преобразования string во float str_a = '50.85' b = 10.33 c = float(str_a) + b print ("The value of c 1" data-ab-test="post_related" data-ab-key="yarpp">Модуль re Python – осваиваем регулярные выражения PythonЗамечание: если вы попытаетесь использовать здесь функцию int(), то получите ошибку.
Преобразование списка строковых чисел в список целых чисел
Если нужно преобразовать строки из чисел, содержащиеся в списке, тогда используйте генератора списков.
Будет создан новый список, в котором можно применить функцию int в каждой итерации.
Код:
#Пример преобразования string в int в списке str_lst = ['1', '2', '3'] int_lst = [int(x) for x in str_lst] print (int_lst)
Будет выведен новый список, состоящий из целых чисел, полученных из строк.
Преобразование списка строк в список чисел с плавающей точкой
Аналогичным образом можно использовать float вместо int для преобразования списка, содержащего строки из целых чисел. Рассмотрим пример:
Код для преобразования элементов списка в числа с плавающей точкой:
#Пример преобразования string во float в списке str_lst = ['10.505', '2.3', '3.99'] float_lst = [float(x) for x in str_lst] print (float_lst)
Пример преобразования строки с запятыми в число
Ну а как насчёт строки наподобие “5,000,000”? Если попытаетесь преобразовать ее, используя функции int() или float() , то получите ошибку.
Решением будет использование import locale . Например:
locale.setlocale(locale.LC_ALL, ‘en_US.UTF-8’ )
Но это может вызвать проблемы в остальных локалях. Другое решение заключается в том, чтобы заменить запятые пустыми строками, то есть“”, а затем использовать функцию int.
str_a = '5,123,000' int_b = int(str_a.replace(',','')) print ("The integer value",int_b)
В результате получаем целое значение. Это же решение можно применить для конвертации строки в число с плавающей точкой.
Преобразование строки в число для расчёта високосного года -пример
Пользовательский ввод в Python- программах воспринимается как строка. В следующем примере пользователя просят ввести год. После ввода значения программа сообщает, високосный это год или нет.
Для этого введённое значение сначала преобразуется в целое число, а затем используется формула расчёта високосного года.
#Пример расчёта високосного года try: Y = int(input("Enter a Year? ")) exceptValueError: print ("You may only enter digits in '2000' format!") else: leap_or_not = Y%4 == 0 ifleap_or_not: print ("Leap year") else: print ("Not a leap year")
Вводимая строка сразу преобразуется в целое число, а затем используется для расчёта.
Как преобразовать целое число в строку?
Для преобразования целых чисел в строки в Python можно использовать функцию str() . Функция str() принимает объект, который может быть типа int , float , double и т.п.
Рассмотрим пример преобразования переменной типа int в строку, которая затем используется как строка для конкатенации:
#Примерпреобразованияint в string a_string = "str function for int to string" a_num = 456 print (a_string + str(a_num))
str function for int to string456
Если бы целочисленная переменная была использована без функции str(), возникла бы ошибка TypeError.
Сергей Бензенко автор-переводчик статьи « 5 examples to Convert a Python string to int and float »
Как преобразовать список в строку в Python
Рассказываем о методе join() и других полезных инструментах для конвертирования Python‑списков в строки.


Иллюстрация: Оля Ежак для Skillbox Media

Иван Стуков
Журналист, изучает Python. Любит разбираться в мелочах, общаться с людьми и понимать их.
В Python существует два основных способа сделать из списка строку: с помощью цикла и с помощью метода join(). У обоих есть нюансы, о которых мы сейчас расскажем.
Преобразование с помощью цикла
Более понятный для новичка, но и более громоздкий способ перевести список в строку — воспользоваться циклом. Если вы уже знаете его и просто хотите узнать более эффективный и быстрый метод, то сразу переходите к следующему разделу. А если нет, то давайте разбираться.
Как это работает: мы создаём пустую строку, потом с помощью цикла переберём каждый элемент списка и на каждой итерации будем добавлять к строке текущий элемент списка.
lst = ['Преобразование','через','цикл'] #Создаём пустую строку string = '' #По очереди добавляем к ней каждый элемент списка for el in lst: string += el print(string) >>> Преобразованиечерезцикл
Однако такой код не будет работать, если в списке есть не только строки, но и, например, числа. Дело в том, что в Python нельзя смешивать данные разных типов.
Поэтому, перед тем как добавлять элемент в список, его нужно преобразовать в строку. Делается это с помощью функции str(). Добавим её в наш код.
#Создаём список, в котором есть как строки, так и цифры lst = ['Преобразование','через','цикл', 2] string = '' for el in lst: string += str(el) #Превращаем каждый элемент списка в строку print(string) >>> Преобразованиечерезцикл2
Если нужно установить разделитель между строками, то для него нужно прописать отдельную строчку кода внутри цикла.
lst = ['Преобразование','через','цикл', 3] string = '' for el in lst: #Добавляем к строке элемент списка string += str(el) #Добавляем к строке разделитель — в данном случае пробел string += ' ' print(string) >>> Преобразование через цикл 3
Обратите внимание: раз мы добавляем разделитель на каждой итерации, пробел будет и после цифры 3 нашего последнего элемента. Это легко проверить, если вместо пробела добавлять какой-то другой, видимый символ.
Эту проблему можно решить — ещё больше усложнив код. Например, введя условие, которое проверяет, последний это элемент в списке или нет. Однако гораздо проще и удобнее превратить список в строку, используя встроенный метод join().
Преобразование с помощью метода join()
Метод join(), по сути, делает всё то же самое, что и наш цикл, но лучше, удобнее и занимает всего одну строку. Вот как его применяют:
string.join(lst)
В качестве аргумента lst он получает список, элементы которого и будет объединять в строку, а string — это разделитель. Если мы не хотим его устанавливать, то в качестве string нужно указать пустую строку.
Посмотрим, как join() применяется на практике.
lst = ['Преобразование', 'через', 'метод', 'join()'] #Объединяем элементы списка с пустым разделителем print(''.join(lst)) >>> Преобразованиечерезметодjoin() #Устанавливаем пробел в качестве разделителя print(' '.join(lst)) >>> Преобразование через метод join()
Заметили особенность? Разделители ставятся только между элементами, а не после каждого элемента, как было в нашем цикле. join() — умница. Однако и тут есть ахиллесова пята: если в списке встречаются нестроковые элементы, мы получим ошибку. Чтобы этого избежать, надо опять-таки сначала превратить все нестроки в строки. Сделать это можно двумя способами.
Использовать выражение-генератор
Выражение-генератор — это конструкция, которая позволяет провести операцию над каждым элементом списка. Оно возвращает генератор, с которым метод join() обращается точно так же, как и со списками.
lst = [1, 1.2, 'строка', False] print(' '.join(str(el) for el in lst)) >>> 1 1.2 строка False
Конструкция str(el) for el in lst означает, что каждый элемент el в списке lst будет превращён в строку с помощью функции str (стандартной функции Python, которую мы уже использовали, когда работали с циклом).
Использовать функцию map()
Функция map() умеет делать то же самое, что и выражение-генератор, но их синтаксис отличается. В качестве первого аргумента она принимает саму операцию, в качестве второго — список, к элементам которого эта операция применяется.
lst = [1, 1.2, 'строка', False] print(' '.join(map(str, lst))) >>> 1 1.2 строка False
Конструкция map(str, lst) означает, что каждый элемент в списке lst будет превращён в строку с помощью функции str. Обратите внимание, что в качестве аргумента в map() передаётся только название функции, без скобок.
Итоги
Преобразовать список в строку можно с помощью цикла, но для этого есть и более удобный инструмент — метод join().
Если содержит нестроковые элементы, то их для начала придётся превратить в строки — иначе выскочит ошибка. Для этого можно воспользоваться выражением-генератором или функцией map().
Читайте также:
- Списки в Python: что это такое и как с ними работать
- Тест. Какой язык создадите вы — Java или Python?
- Язык Go: что под капотом и зачем программисту учить его как второй
Как из строки-числа сделать список чисел
Задача следующая:
Мне нужно считать строку, например, '234567', и вывести список чисел [2,3,4,5,6,7].
Я знаю метод строк split(), который позволит строку разбить на подстроки ['2','3','4','5','6','7'], но чтобы он успешно сработал, нужно, чтобы между числами стояли пробелы: '2 3 4 5 6 7'. Буду очень благодарен, если подскажете, как вставлять пробелы в исходную строку
Лучшие ответы ( 3 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Как из строки сделать список
Как из строки id_производителя - фирма, id_поставки - дата_поставки сделать спиок , ] но также.
Как из строки сделать многомерный список
Как с помощью split из строки id_производителя - фирма, id_поставки - дата_поставки сделать список.
Как сделать список с кумулятивной суммой чисел?
Sample Input: 12345 Sample Output: Как сделать список с кумулятивной суммой чисел?

7651 / 4098 / 1791
Регистрация: 27.03.2020
Сообщений: 6,913

Сообщение было отмечено Welemir1 как решение
Решение
80phone,
1 2 3 4 5 6 7
s ='234567' lst = [int(i) for i in s] # список чисел print(lst) lst = list(map(int, iter(s))) # список чисел lsts = list(iter(s)) # список символов print(lst) print(lsts)
Автоматизируй это!

7540 / 4556 / 1206
Регистрация: 30.03.2015
Сообщений: 13,118
Записей в блоге: 29

Сообщение было отмечено 80phone как решение
Решение
Сообщение от Gdez 
b = list(iter(s)) # список символов
чего народ то распугиваешь?
b = list(s)

7651 / 4098 / 1791
Регистрация: 27.03.2020
Сообщений: 6,913
Welemir1,
Status 418

5244 / 2241 / 589
Регистрация: 26.11.2017
Сообщений: 5,172
Записей в блоге: 3
Регистрация: 24.08.2021
Сообщений: 2
Спасибо за быстрый ответ!
@ Garry Galler
Сообщение от 80phone 
Буду очень благодарен, если подскажете, как вставлять пробелы в исходную строку
А на вопрос ТС так никто и не ответил . 🙂
80phone,
Сага о XYZ.
Меню пользователя @ Garry Galler
Читать блог
3850 / 2138 / 566
Регистрация: 02.09.2015
Сообщений: 5,425

Сообщение было отмечено 80phone как решение
Решение
Сообщение от Garry Galler 
А на вопрос ТС так никто и не ответил . 🙂
Строки же иммутабельны?
Добавлено через 2 минуты
Сообщение от 80phone 
как вставлять пробелы в исходную строку
1 2 3
s = "234567" t = " ".join(s) assert t == "2 3 4 5 6 7"
Автоматизируй это!

7540 / 4556 / 1206
Регистрация: 30.03.2015
Сообщений: 13,118
Записей в блоге: 29
Сообщение от Arsegg 
s = "234567"
t = " ".join(s)
assert t == "2 3 4 5 6 7"
ну хоть кто-то по делу написал))
Am I evil? Yes, I am!


18967 / 9662 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473
1 2 3 4
import re s = '123456' print(re.sub(r'(?<=.)(?=.)', ' ', s))
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
Сообщение от 80phone 
Буду очень благодарен, если подскажете, как вставлять пробелы в исходную строку
print(*list('123456'))
3850 / 2138 / 566
Регистрация: 02.09.2015
Сообщений: 5,425
Сообщение от AlexMarkov 
print(*list('123456'))
Тогда уже: print(*"123456") .
Am I evil? Yes, I am!


18967 / 9662 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473
Сообщение от AlexMarkov 
print(*list('123456'))
И где тут вставка пробелов?
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
Сообщение от iSmokeJC 
И где тут вставка пробелов?
В стандартном потоке вывода, надо знать о такой возможности, вот и все.
Не "вумничайте" пожалуйста, если хотите что то сказать чего я не знаю, так и скажите.
Сообщение от Arsegg 
print(*"123456")
Что здесь, есть пробелы?
Am I evil? Yes, I am!


18967 / 9662 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473
Сообщение от AlexMarkov 
Что здесь, есть пробелы?
Не надо стрелки переводить, Arsegg лишь доработал твой код.
Сообщение от AlexMarkov 
Не "вумничайте" пожалуйста
И в мыслях не было. Задача стоит - вставить в строку пробелы. Твой код эту задачу не выполняет. Именно это я и сказал.
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
Сообщение от iSmokeJC 
Твой код эту задачу не выполняет
Да как же не выполняет, а почему
Вывод тогда:
1 2 3 4 5 6
Там что не пробелы?
Am I evil? Yes, I am!


18967 / 9662 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473
AlexMarkov, ну присвой это переменной. И разбей сплитом потом.
Добавлено через 3 минуты
Вывести в консоль с пробелами и вставить в строку пробелы - несколько разные вещи.
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
iSmokeJC, ну это я прекрасно понимаю, поэтому и не отвечал на этот вопрос, а просто сказал о возможности использования оператора *
Добавлено через 6 минут
" ".join(list('12345')).split()
Добавлено через 57 секунд
Сообщение от 80phone 
Как из строки-числа сделать список чисел
Тема звучала так.
Am I evil? Yes, I am!


18967 / 9662 / 2710
Регистрация: 21.10.2017
Сообщений: 21,473
Сообщение от AlexMarkov 
Тема звучала так.
А собственно вопрос звучал так
Сообщение от 80phone 
Буду очень благодарен, если подскажете, как вставлять пробелы в исходную строку
Добавлено через 2 минуты
Ладно, хватит оффтопить. ТС получил ответ на свой вопрос.
3850 / 2138 / 566
Регистрация: 02.09.2015
Сообщений: 5,425
iSmokeJC,
1 2 3 4 5 6 7
from io import StringIO sio = StringIO() print(*"234567", file=sio) result = sio.getvalue() print(result)
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
HTML список без перехода строки или как сделать кружочек?
Как в HTML сделать чтобы следующий элемент списка был без перехода на новую строку или каким.

Как в питоне сделать список, в котором все элементы - однозначные числа типа int
Нужен сам код команды, которая сделает список, в котором все элементы - однозначные числа типа.
Построить список чисел. 4 числа из списка начиная с i-го номера поместить в новый список
Построить список чисел. 4 числа из списка начиная с i-го номера поместить в новый список. Вывести.

Необходимо сделать так, чтобы последовательность # воспринималась Лиспом как список симметричных чисел
Необходимо сделать так, чтобы последовательность # воспринималась Лиспом как список.