所以我有一个带有列表的类,我想在该列表的所有元素中添加一个数字,但不是为该类中的每个列表添加一个数字。我试过这个:
class class_name:
def __init__(self,list_name,other_list):
self.list_name = list_name
self.other_list = other_list
list1 = [1.0,2.0,3.0,4.0]
list2 = [4.0,5.0,6.0,7.0]
data = [0]*len(list1)
for i,(l1,l2) in enumerate(zip(list1,list2)):
data[i] = class_name(l1,l2)
[(x + 5.0).list_name for x in data]
它给了我错误:
TypeError: unsupported operand type(s) for +: 'instance' and 'float'
编辑:人们似乎不明白我想要什么。在我的实际代码中,列表已被添加到我正在使用的类(在本例中为数据)中,但是需要校准类中的一个列表(特别是指大小)。我这样做是通过在该列表中的每个元素上添加一个数字来校准它。必须对连接到其所在班级的列表进行此操作,因此我无法在将列表放入课程之前对其进行编辑。
我已经在我的代码中更早地创建了这个类,我需要它以前的方式,以便我可以使用所有元素。现在,在代码的后面,我想在类中校准这个量级列表。有没有办法做到这一点?
也许这种尝试更好地说明了我尝试做的事情:
[x.list_name for x in data] = [x.list_name+5 for x in data]
这也不起作用,我收到了这个错误:
SyntaxError: can't assign to list comprehension
我觉得这让人们了解我的需要。
答案 0 :(得分:0)
如果要增加存储为对列表的两个列表中的一个,这应该有效:
[x.list_name+5.0 for x in class_names]
x不是数字,它是class_name对象。您想要从x(x.list_name)中检索要增加的内容,然后添加5.0。
答案 1 :(得分:0)
查看python的Map函数。
https://docs.python.org/2/tutorial/datastructures.html#functional-programming-tools
class class_name:
def __init__(self,list_name,other_list):
self.list_name = list_name
self.other_list = other_list
list1 = [1.0,2.0,3.0,4.0]
list2 = [4.0,5.0,6.0,7.0]
def add_five(x): return x+5
list1 = map(add_five, list1)
#or instead you can use a lambda
list1 = map(lambda x: x+5 , list1)
编辑:也许试试这个。
for class_name in class_names:
class_name.list_name = map(lambda x: x+5 , class_name.list_name)
答案 2 :(得分:0)
您首先将值添加到实例,然后访问该属性。
class class_name:
def __init__(self,list_name,other_list):
self.list_name = list_name
self.other_list = other_list
list1 = [1.0,2.0,3.0,4.0]
list2 = [4.0,5.0,6.0,7.0]
class_names = [0]*len(list1)
for i,(l1,l2) in enumerate(zip(list1,list2)):
class_names[i] = class_name(l1,l2)
print [x.list_name+5.0 for x in class_names]
答案 3 :(得分:0)
我不确定你的意思,但我创造了一个简单的例子:
class class_name(object):
def __init__(self,list_name,other_list):
self.list_name = list_name
self.other_list = other_list
self.list1 = []
self.list2 = []
self.list1.append(self.list_name)
self.list2.append(self.other_list)
print "My List1: ", self.list1
print "My List2: ", self.list2
def input_data():
list_one = raw_input("Data for list 1: ")
list_two = raw_input("Data for list 2: ")
class_name(list_one, list_two)
if __name__ == '__main__':
input_data()
这就是你想要的吗?