Python列表转换为整数

时间:2013-08-19 17:40:45

标签: python list python-3.x

在测试代码时出现了一些错误 - 在数学运算之后,列表'缩小'到自己的最后一项

在Python 3.3解释器中,它工作得很好......

a = [a + b for a, b in zip(a, b)]

我正在使用此代码添加一些列表项

a = [1, 2, 3]
b = [2, 3, 2]

这很好用并返回

>>> a
[3, 5, 5]
>>> b
[2, 3, 2]

然后我写了一个类来处理更多列表:

class Vector:

    def __init__(self, name = '', vector = []):
        self.__name = name
        self.__vector = vector


    def add_row_to_scalar_multiple(self, vector):
        self.__vector = [self.__vector + vector.__vector for self.__vector, vector.__vector in zip(self.__vector, vector.__vector)]


    def __str__(self):
        vec = ('{0} = {1}'.format(self.__name, self.__vector))
        formatted_vec = vec.replace(',', '')
        return formatted_vec

当运行具有上述相同列表的代码时,一个列表将缩减为单个整数

vec_a = Vector('a', [1, 2, 3])
vec_b = Vector('b', [2, 3, 2]) 

a = [1, 2, 3]
b = [2, 3, 2]

vec_b.add_row_to_scalar_multiple(vec_a)


a = 3
b = [3, 5, 5]

我无法弄清楚我做错了什么,所以任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:6)

self.__vector = [self.__vector + vector.__vector for self.__vector, vector.__vector in zip(self.__vector, vector.__vector)]

看到了吗?您要在循环self.__vector, vector.__vector中为for self.__vector, vector.__vector in zip(self.__vector, vector.__vector)分配值。

答案 1 :(得分:3)

a = [a + b for a, b in zip(a, b)]

你不应该对迭代变量使用“a,b”,它们与原始列表不同,这导致你错误地认为它们应该始终与你所做的事情相同重新压缩。

应该是例如a = [aa + bb for aa, bb in zip(a, b)]

然后将它转换为你的课程,你会看到,而不是:

self.__vector = [self.__vector + vector.__vector
                 for self.__vector, vector.__vector
                 in zip(self.__vector, vector.__vector)]

你应该有这个:

self.__vector = [aa + bb
                 for aa, bb
                 in zip(self.__vector, vector.__vector)]

另外,你的函数应该可能被称为__iadd__,但这不是重点。

一个不相关的说明:

   self.__vector = vector

这条线有两个问题。首先,它只是存储对传入的列表的引用(可能不是您想要的)。更大的问题是您的默认vector = []参数每次都是相同的列表。除非您知道自己在做什么,否则应避免使用可变类型的默认值。我建议self.__vector = list(vector)