Приєднайтесь до списку елементів різних типів, як рядок у Python


292

Мені потрібно приєднатись до списку елементів. Багато елементів у списку є цілими значеннями, поверненими з функції; тобто

myList.append(munfunc()) 

Як слід перетворити повернутий результат у рядок, щоб з'єднати його зі списком?

Чи потрібно мені робити наступне для кожного цілого значення:

myList.append(str(myfunc()))

Чи існує більш пітонічний спосіб вирішити проблеми лиття?


3
Будь ласка, переконайтеся, що ви використовуєте добру граматику, щоб люди могли зрозуміти, що ви запитуєте, та / або перечитати ваше запитання перед публікацією.
allyourcode

Відповіді:


537

Виклик str(...)- це пітонічний спосіб перетворення чогось у рядок.

Ви можете розглянути, чому ви хочете список рядків. Натомість ви можете зберігати це як список цілих чисел і лише перетворювати цілі числа в рядки, коли вам потрібно їх відображати. Наприклад, якщо у вас є список цілих чисел, ви можете конвертувати їх по одному в циклі for і з'єднати їх з ,:

print(','.join(str(x) for x in list_of_ints))

175

Немає нічого поганого в передачі цілих чисел на str. Однією з причин, чому ви цього не можете зробити, є те, що myList насправді повинен бути списком цілих чисел, наприклад, було б розумно підсумовувати значення у списку. У такому випадку не передавайте свої ints str перед тим, як додавати їх до мого списку. Якщо ви не перетворюєте на рядки перед додаванням, ви можете сконструювати один великий рядок, зробивши щось подібне

', '.join(map(str, myList))

36
Імовірно, англійська мова не є його рідною мовою. Ви не впевнені у своєму бажанні приєднатись до списку предметів, до яких він перетворює str? Зверніть увагу на можливість того, що вам потрібно додати трохи нечіткої логіки до свого аналізатора ;-)
Джон Махін

3
@John Я вважав це, але якщо він добре володіє англійською мовою, я хотів обережно підштовхнути його, щоб довести рівень англійської мови на SO до його нормального рівня. Я думаю, що моя відповідь містить різні тлумачення та ситуації, у яких він може бути.
allyourcode

41

функцію карти в python можна використовувати. Це бере два аргументи. Перший аргумент - це функція, яку потрібно використовувати для кожного елемента списку. Другий аргумент - це ітерабельний .

a = [1, 2, 3]   
map(str, a)  
['1', '2', '3']

Після перетворення списку в рядок ви можете використовувати просту функцію приєднання для об'єднання списку в одну рядок

a = map(str, a)    
''.join(a)      
'123'

10
a=[1,2,3]
b=[str(x) for x in a]
print b

Вищеописаний метод є найпростішим і найзагальнішим способом перетворення списку в рядок. інший короткий метод -

a=[1,2,3]
b=map(str,a)
print b

4

Існує три способи зробити це.

скажімо, у вас є список вкладів

my_list = [100,200,300]
  1. "-".join(str(n) for n in my_list)
  2. "-".join([str(n) for n in my_list])
  3. "-".join(map(str, my_list))

Однак, як зазначено в прикладі timeit на веб-сайті python за адресою https://docs.python.org/2/library/timeit.html, використання карт швидше. Тому я б рекомендував вам використовувати"-".join(map(str, my_list))


2

Ваша проблема досить зрозуміла. Можливо, ви шукаєте розширення, щоб додати всі елементи іншого списку до наявного списку:

>>> x = [1,2]
>>> x.extend([3,4,5])
>>> x
[1, 2, 3, 4, 5]

Якщо ви хочете перетворити цілі числа в рядки, використовуйте str () або рядкову інтерполяцію, можливо, поєднану з розумінням списку, тобто

>>> x = ['1', '2']
>>> x.extend([str(i) for i in range(3, 6)])
>>> x
['1', '2', '3', '4', '5']

Все це вважається пітонічним (нормально, вираз генератора є ще більш пітонічним, але давайте залишатимемося простими та на тему)


2

Наприклад:

lst_points = [[313, 262, 470, 482], [551, 254, 697, 449]]

lst_s_points = [" ".join(map(str, lst)) for lst in lst_points]
print lst_s_points
# ['313 262 470 482', '551 254 697 449']

Щодо мене, я хочу додати strперед кожним списком рядків:

# here o means class, other four points means coordinate
print ['0 ' + " ".join(map(str, lst)) for lst in lst_points]
# ['0 313 262 470 482', '0 551 254 697 449']

Або єдиний список:

lst = [313, 262, 470, 482]
lst_str = [str(i) for i in lst]
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

lst_str = map(str, lst)
print lst_str, ", ".join(lst_str)
# ['313', '262', '470', '482'], 313, 262, 470, 482

1

Можливо, вам не потрібні числа як рядки, просто виконайте:

functaulu = [munfunc(arg) for arg in range(loppu)]

Пізніше, якщо він вам потрібен як рядок, ви можете зробити це з рядком або з рядком формату:

print "Vastaus5 = %s" % functaulu[5]


-1

Як так, схоже, нікому не подобається repr?
пітон 3.7.2:

>>> int_list = [1, 2, 3, 4, 5]
>>> print(repr(int_list))
[1, 2, 3, 4, 5]
>>> 

Але будьте обережні, це явне уявлення. Приклад показує:

#Print repr(object) backwards
>>> print(repr(int_list)[::-1])
]5 ,4 ,3 ,2 ,1[
>>> 

більше інформації на pydocs-repr

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.