Как я могу преобразовать тип списка в числовой тип в Python - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть внешний файл, представляющий собой один столбец чисел с плавающей запятой (хочу иметь возможность расширить его, чтобы иметь несколько столбцов в будущем). Я хочу импортировать его в массив. Этот файл является файлом cvs, но он также может быть и файлом txt.

Я использую:

reader = csv.reader(open("e=0.6.csv"))
table = []
for row in reader:
    values = []    
    for col in row: 
        values.append(float(col))
    table.aapend(values)

Результатом является список [[1.0], [0.98], ......] Я хочу преобразовать список в массив чисел (1.0, 0.98, ...) Как я могу это сделать?

Ответы [ 7 ]

2 голосов
/ 06 апреля 2011
reader = csv.reader(open("e=0.6.csv"))
table = tuple(float(col) for row in reader for col in row)
1 голос
/ 06 апреля 2011

(1.0, 0.98, ...) - это кортеж .Вот один из способов сделать кортеж из этого:

>>> l = [[1.0], [0.98]]
>>> tuple(i[0] for i in l)
(1.0, 0.97999999999999998)
1 голос
/ 06 апреля 2011

Почему вы создаете новый список с именем values? Почему бы не добавить в таблицу вместо этого? т.е.

reader = csv.reader(open("e=0.6.csv"))
table = []
for row in reader: 
    for col in row: 
        table.append(float(col))
0 голосов
/ 06 апреля 2011

Я не понимаю, почему вы используете csv.reader в этом случае. Вы сами сказали, что это не совсем CSV! Просто сделайте либо:

map(float, open("e=0.6.csv").readlines())

или

[float(x) for x in open("e=0.6.csv").readlines()]
0 голосов
/ 06 апреля 2011

Используйте понимание списка:

>>> l = [[0.1], [0.2], [0.3]]
>>> [x[0] for x in l]
[0.1, 0.2, 0.3]

Или функцию карты:

>>> map(lambda x:x[0], l)
[0.1, 0.2, 0.3]

Или функцию уменьшения:

>>> reduce(lambda x,y: x+y, l, [])
[0.1, 0.2, 0.3]

Или генератор:

>>> (x[0] for x in l)
<generator object <genexpr> at 0x1004e00f0>

Или просто храните свои номера прямо в списке.

0 голосов
/ 06 апреля 2011
reader = csv.reader(open("e=0.6.csv"))
table = []
for row in reader:
    for col in row: 
        table.aapend(float(col))
0 голосов
/ 06 апреля 2011

В вашем конкретном случае я пропущу этот шаг и просто сделаю что-то вроде:

reader = csv.reader(open("e=0.6.csv"))

table = [float(col) for col in row for row in reader]

Однако, если вы хотите перейти к исходному ответу, вы можете сделать:

Используйте метод map :

>>> l = [[1.0], [0.98], [3.0]]
>>> map(lambda x: x[0], l)
[1.0, 0.97999999999999998, 3.0]

Или понимание списка:

>>> [e for subl in l for e in subl]
[1.0, 0.97999999999999998, 3.0]

В любом случае вы можете преобразовать список, возвращенный в кортеж, просто выполнив tuple(result)

...