Как из числа сделать список в питоне
Перейти к содержимому

Как из числа сделать список в питоне

  • автор:

преобразование числа в список [закрыт]

Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 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: Как сделать список с кумулятивной суммой чисел?

Эксперт Python

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)

Автоматизируй это!

Эксперт Python

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

Лучший ответ

Сообщение было отмечено 80phone как решение

Решение

ЦитатаСообщение от Gdez Посмотреть сообщение

b = list(iter(s)) # список символов
чего народ то распугиваешь?

b = list(s)

Эксперт Python

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

Эксперт Python

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"

Автоматизируй это!

Эксперт Python

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!

Эксперт PythonЭксперт Java

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!

Эксперт PythonЭксперт Java

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!

Эксперт PythonЭксперт Java

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!

Эксперт PythonЭксперт Java

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!

Эксперт PythonЭксперт Java

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-го номера поместить в новый список. Вывести.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *