2012-02-15 4 views
1

У меня есть список списка 'q', и я хочу разделить каждое число в q на сумму в каждом списке (= 10) Я пробовал это :Как разделить каждый элемент в списке списков на число в python

q = [[0,0,0,10],[1,2,6,1]] 
B=[] 
for x in q: 
    y = [z/sum(x[:len(x)]) for z in x] 
    B.append(y) 
print B 

Это не дает мне ожидаемый результат

кто здесь знает, что случилось?

ответ

1
$ python 
>>> q = [[0,0,0,10],[1,2,6,1]] 
>>> B = [[float(j)/sum(i) for j in i] for i in q] 
>>> B 
[[0.0, 0.0, 0.0, 1.0], [0.1, 0.2, 0.6, 0.1]] 

Примечание: в python3, float() не требуется.

+0

У меня есть 'q = [[7,2,3], [4,5,6]]' и 'r = [[6,1,2], [3,4,5]]'. Мне нужно разделить соответствующие элементы. 'B = [[float (j)/float (i) для j в q] для i в r]'. Тем не менее, я продолжаю получать ошибку: аргумент TypeError: float() должен быть строкой или числом. Я импортировал подразделение из будущего. Какие-либо предложения? – Biotechgeek

1
B = [] 
for x in q: 
    theSum = sum(x) 
    y = [float(xi)/theSum for xi in x] 
    B.append(y) 
print B 
1

Выполнение целочисленного деления, поскольку оба операнда являются целыми числами.

y = [float(z)/sum(x) for z in x] 
+0

У меня есть 'q = [[7,2,3], [4,5,6]]' и 'r = [[6,1,2], [3,4,5]]'. Мне нужно разделить соответствующие элементы. 'B = [[float (j)/float (i) для j в q] для i в r]'. Тем не менее, я продолжаю получать ошибку: аргумент TypeError: float() должен быть строкой или числом. Я импортировал подразделение из будущего. Какие-либо предложения? – Biotechgeek

1

Вы используете целочисленное деление, которое будет округлять результат до следующего целого числа до нуля. Преобразуйте один из операндов в float, чтобы получить деление с плавающей запятой. Для преобразования массива в месте, вы можете сделать

for row in q: 
    s = float(sum(row)) 
    row[:] = [x/s for x in row] 
2

Как уже отмечалось, ваша программа будет использовать целочисленное деление, которое, похоже, не является тем, что вы ищете. Однако вместо того, чтобы преобразовать одно из значений явным образом в float, я предлагаю, чтобы правильным решением было добавить from ___future__ import division в начало вашего скрипта (и, действительно, каждый скрипт вы пишете для версий Python перед Python 3) , Это переключает деление на возвращаемые значения float, что устраняет множество тонких математических ошибок. Для тех случаев, когда вам нужно целое деление, вы можете использовать двойную косую черту //.

Смежные вопросы