У меня есть список сказать:Как преобразовать строки чисел в целые числа в списке?
['batting average', '306', 'ERA', '1710']
Как я могу преобразовать предполагаемые цифры, не касаясь струн?
Благодарим за помощь.
У меня есть список сказать:Как преобразовать строки чисел в целые числа в списке?
['batting average', '306', 'ERA', '1710']
Как я могу преобразовать предполагаемые цифры, не касаясь струн?
Благодарим за помощь.
changed_list = [int(f) if f.isdigit() else f for f in original_list]
Данные выглядят так, как вы знаете, в каких позициях должны быть номера. В этом случае, вероятно, лучше явно преобразовать данные в этих положениях, вместо того, чтобы просто преобразовать все, что выглядит как номер:
ls = ['batting average', '306', 'ERA', '1710']
ls[1] = int(ls[1])
ls[3] = int(ls[3])
Yep это лучшее решение для статического случая, в то время как Алекс лучше всего подходит для динамического случая. – Unknown
Попробуйте это:
def convert(someList):
for item in someList:
try:
yield int(item)
except ValueError:
yield item
newList= list(convert(oldList))
a= ['batting average', '306', 'ERA', '1710.5']
[f if sum([c.isalpha() for c in f]) else float(f) for f in a ]
если список содержит поплавок , string и int (как указано в @ d.putto в комментарии)
'sum ([c.isalpha() для c в f])' довольно субоптимальный способ проверить «если какой-либо символ из f является алфавитным» - попробуйте 'any (c.isalpha() для c в f) 'для повышения удобочитаемости и производительности. Конечно, оба будут терпеть неудачу, если 'f' равно, например,' '! '' - строка, которая не является номером, но не имеет буквенно-цифровых символов, а также не может преобразовать, например, '' 1.7e3'' - строку, которая содержит буквенно-цифровой символ, но, тем не менее, будет отлично передаваться как аргумент 'float' (« экспоненциальная нотация »). –
true. хороший момент ... отправил его только для ответа на конкретный надуманный пример d.putto. Должен был подумать, прежде чем публиковать мой полупеченный ответ! –
Элегантный однострочный. Вот сила понимания списков. – mkClark
думал о похожих строках – Nope
Хорошее решение, но что, если в списке есть значения с плавающей запятой, также '['batting average', '306', 'ERA', '1710.5']' –