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

Как натуральное число перевести в список

  • автор:

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

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

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

Закрыт 6 лет назад .

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,161 3 3 золотых знака 20 20 серебряных знаков 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

Рассказываем о методе 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: что под капотом и зачем программисту учить его как второй

Как из строки-числа сделать список чисел

Author24 — интернет-сервис помощи студентам

Задача следующая:
Мне нужно считать строку, например, ‘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

8219 / 4338 / 1838
Регистрация: 27.03.2020
Сообщений: 7,162

Лучший ответ

Сообщение было отмечено 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

7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29

Лучший ответ

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

Решение

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

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

b = list(s)

Эксперт Python

8219 / 4338 / 1838
Регистрация: 27.03.2020
Сообщений: 7,162
Welemir1,
Status 418

Эксперт Python

4578 / 2345 / 602
Регистрация: 26.11.2017
Сообщений: 5,265
Записей в блоге: 3
Регистрация: 24.08.2021
Сообщений: 2
Спасибо за быстрый ответ!
@ Garry Galler

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

Буду очень благодарен, если подскажете, как вставлять пробелы в исходную строку
А на вопрос ТС так никто и не ответил . 🙂
80phone,
Сага о XYZ.

Меню пользователя @ Garry Galler
Читать блог

3573 / 2174 / 570
Регистрация: 02.09.2015
Сообщений: 5,492

Лучший ответ

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

Решение

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

А на вопрос ТС так никто и не ответил . 🙂
Строки же иммутабельны?

Добавлено через 2 минуты

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

как вставлять пробелы в исходную строку

1 2 3
s = "234567" t = " ".join(s) assert t == "2 3 4 5 6 7"

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

Эксперт Python

7107 / 4611 / 1215
Регистрация: 30.03.2015
Сообщений: 13,243
Записей в блоге: 29

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

s = «234567»
t = » «.join(s)
assert t == «2 3 4 5 6 7»
ну хоть кто-то по делу написал))
Am I evil? Yes, I am!

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

17594 / 10343 / 2826
Регистрация: 21.10.2017
Сообщений: 22,418

1 2 3 4
import re s = '123456' print(re.sub(r'(?<=.)(?=.)', ' ', s))

99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708

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

Буду очень благодарен, если подскажете, как вставлять пробелы в исходную строку

print(*list('123456'))

3573 / 2174 / 570
Регистрация: 02.09.2015
Сообщений: 5,492

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

print(*list(‘123456’))
Тогда уже: print(*»123456″) .
Am I evil? Yes, I am!

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

17594 / 10343 / 2826
Регистрация: 21.10.2017
Сообщений: 22,418

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

print(*list(‘123456’))
И где тут вставка пробелов?
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708

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

И где тут вставка пробелов?

В стандартном потоке вывода, надо знать о такой возможности, вот и все.
Не «вумничайте» пожалуйста, если хотите что то сказать чего я не знаю, так и скажите.

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

print(*»123456″)
Что здесь, есть пробелы?
Am I evil? Yes, I am!

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

17594 / 10343 / 2826
Регистрация: 21.10.2017
Сообщений: 22,418

ЦитатаСообщение от 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

17594 / 10343 / 2826
Регистрация: 21.10.2017
Сообщений: 22,418

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

17594 / 10343 / 2826
Регистрация: 21.10.2017
Сообщений: 22,418

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

Тема звучала так.
А собственно вопрос звучал так

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

Буду очень благодарен, если подскажете, как вставлять пробелы в исходную строку
Добавлено через 2 минуты

Ладно, хватит оффтопить. ТС получил ответ на свой вопрос.

3573 / 2174 / 570
Регистрация: 02.09.2015
Сообщений: 5,492
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-го номера поместить в новый список. Вывести.

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

Или воспользуйтесь поиском по форуму:

Как преобразовать список чисел с плавающей запятой в список целых чисел в Питоне

Самый питонический способ преобразовать список чисел с плавающей запятой fs в список целых чисел – использовать однострочный код fs = [int (x) for x in fs]. Он перебирает все элементы в списке fs, используя понимание списка, и преобразует каждый элемент списка x в целочисленное значение с помощью конструктора int (x).

В этой статье показаны простейшие способы преобразования одномерного списка, состоящего только из чисел с плавающей запятой , в список целых чисел.

Проблема: Дан список чисел с плавающей запятой [1.0, 2.0, 3.0] . Как его преобразовать в список целых чисел [1, 2, 3] ?

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

Метод 1: Список

Предположим у нас есть список:

a = [1.1, 1.2, 1.8, 0.5, 5.9, -2.3]

Проверим тип элементов списка:

print(type(a[0])) #

Применим встроенную функцию int, получим список состоящий из целых чисел:

print([int(a) for a in a]) # [1, 1, 1, 0, 5, -2]

Проверим тип элементов списка:

A = [int(a) for a in a] print(type(A[0])) #

Таким образом, используя встроенную функцию int, которая, преобразуя вещественное число, делает округление в сторону нуля, а вернее будет сказать – отбрасывает дробную часть, мы можем однострочным кодом получить новый список целых чисел.

Метод 2: Функция Map

Встроенная функция map, является хорошо оптимизированной и эффективной, при ее вызове элементы списка извлекаются при обращении, а следовательно в памяти находится и обрабатывается один элемент, что позволяет программе не хранить в памяти системы весь список элементов.

Применим к тому же списку ‘a’ код ниже:

print(list(map(int, a))) # [1, 1, 1, 0, 5, -2]

Проверять тип элементов полученного списка мы не будем, так как при вызове функции ‘map’ передали в нее уже описанную в методе 1 функцию ‘int’ в качестве аргумента, а результат обернули в список применением функции ‘list’.

Метод 3: Функция Round в определении Списка

Он очень схож с первым, но в отличие от ‘int’, он не просто отбрасывает дробную часть, а округляет до ближайшего четного целого числа, если дробная часть равна 0,5. Также можно передать в качестве второго аргумента количество знаков после запятой, до которых необходимо округление, по умолчанию это 0, этим мы и воспользуемся:

print([round(a) for a in a])

Проверим тип чисел нового списка:

D = [round(a) for a in a] print(type(D[0])) #

Как видим из этого примера, есть разные встроенные функции для достижения нашей цели, отличие в способе и величине погрешности при округлении.

Метод 4: Модуль Math

В этом способе я предлагаю воспользоваться импортируемым модулем ‘math’, в котором будем использовать три функции ceil() , floor() , и trunc() . Рассмотрим подробнее каждый. Синтаксис у них одинаковый, различие в способе округления.

Применим к изначальному списку:

a = [1.1, 1.2, 1.8, 0.5, 5.9, -2.3] print([math.ceil(a) for a in a]) # [2, 2, 2, 1, 6, -2]

‘Ceil’ округляет к ближайшему большему целому числу с учетом знака(-2.3 < -2 вывод будет True)

Проверим тип чисел в полученном списке:

C = [math.ceil(a) for a in a] print(type(C[0])) #

Рассмотрим следующую функцию в модуле ‘math’ – ‘floor’, её действие противоположно ‘ceil’ – округляет в меньшую сторону к ближайшему целому числу:

print([math.floor(a) for a in a]) # [1, 1, 1, 0, 5, -3]

F = [math.floor(a) for a in a] print(type(F[0])) #

Следующая функция – ‘trunc’, является аналогом встроенной функции ‘int’ – просто отбрасывает дробную часть какая она бы не была:

print([math.trunc(a) for a in a]) # [1, 1, 1, 0, 5, -2]

И снова проверим тип чисел нового списка:

T = [math.trunc(a) for a in a] print(type(T[0])) #

Метод 5: NumPy

Здесь рассмотрим преобразование списка из ‘int’ в массив c помощью модуля NumPy. Отличие массива от списка – все элементы массива должны быть одного типа, как “float’ и ‘int’. Числовые операции с большим объемом данных можно проводить с массивами гораздо быстрее и эффективнее чем со списками.

Превратим наш первый список ‘a’ в массив:

import numpy as np N = np.array(a, int)

В функцию array мы передаем два аргумента, имя списка для конвертации в массив и тип для каждого элемента.

# [ 1 1 1 0 5 -2]

Проверим тип элементов:

print(type(N[0])) #

В отличие от типа чисел ‘int’ в Python в модуле NumPy они определены несколько иначе и разделены на несколько подгрупп. Например, ‘int32’ – это целые числа в диапазоне от -2147483648 до 2147483647(4-байтовые числа), ‘int64’ – числа от -9223372036854775808 до 9223372036854775807(8-байтовые числа), также есть различные типы ‘int’ для 32- и 64-битных операционных систем, это обязательно надо учитывать при вычислениях с массивами.

Categories Python

Be on the Right Side of Change ��

  • The world is changing exponentially. Disruptive technologies such as AI, crypto, and automation eliminate entire industries. ��
  • Do you feel uncertain and afraid of being replaced by machines, leaving you without money, purpose, or value? Fear not! There a way to not merely survive but thrive in this new world!
  • Finxter is here to help you stay ahead of the curve, so you can keep winning as paradigms shift.

Learning Resources ��‍��

⭐ Boost your skills. Join our free email academy with daily emails teaching exponential with 1000+ tutorials on AI, data science, Python, freelancing, and Blockchain development!

Join the Finxter Academy and unlock access to premium courses �� to certify your skills in exponential technologies and programming.

New Finxter Tutorials:

  • How I Missed a 200x Gain in Nvidia Stock as a PhD in AI
  • [Fixed] Error Code 429: Quota Exceeded
  • What is Hugging Face Used For? Exploring its Applications in Machine Learning
  • Bitcoin Trading Simulation (Free Online Game)
  • Creating a Live Bitcoin Price Chart Using Binance API (No API Key!)
  • Google Making Billions of AI – The Investment Case for Alphabet
  • Tesla Leaps in Artificial Intelligence – Robotaxi, Optimus Bot, and FSD Updates Q1 2024
  • Python Object Creation: __new__ vs __init__
  • Python Check If an Integer is in Range
  • 5 Best Ways to Edit Large Text Files in Windows

Finxter Categories:

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

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