Когда запись приводится, объект записи постоянно изменяется в списке - PullRequest
0 голосов
/ 23 апреля 2020

Я это вложенный список, в котором внутренний список имеет два элемента: имя и значение с плавающей запятой. Мне стало любопытно, что такое кастинг, и я использовал два разных подхода для составления списка следующим образом.

Метод 1:

n = int(input())
lis = [[input() for i in range(2)] for y in range(n)]
for k, v in lis:
    v = float(v)
print(lis)

Вывод:

[['a', '-25.001'], ['b', '-25.0001'], ['c', '-25.000'], ['d', '-25.0']]

Метод 2:

n = int(input())
lis=[]
for i in range(n):
    lis.append([input(),float(input())])
print(lis)

Вывод:

[['a', -25.001], ['b', -25.0001], ['c', -25.0], ['d', -25.0]]

Мне нужен вывод метода 2, но я не могу думать, почему вывод первого метода выдает '' вокруг числа с плавающей запятой, хотя я приведено к float.

Это потому, что приведение объекта с плавающей точкой не работает постоянно?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Представление с плавающей точкой в ​​операторе печати без ', но вы можете добавить их по обе стороны от числа с плавающей точкой с помощью методов str () или repr (), таких как

lis.append([input(),str(float(input()))])

или

lis.append([input(),repr(float(input()))])

Выход

[['a', '-25.001'], ['b', '-25.0001'], ['c', '-25.000'], ['d', '-25.0']]
1 голос
/ 23 апреля 2020

Измените это:

for k, v in lis:
    v = float(v)

на это:

for i in range(n):
    lis[i][1] = float(lis[i][1])

В качестве альтернативы вы можете сделать:

for pair in lis:
    pair[1] = float(pair[1])

Это работает, потому что pair является ссылается на подсписок, поэтому изменение самого pair не будет иметь никакого эффекта, изменение элемента пары изменяет общий подсписок.

...