有人可以向我解释为什么第一个代码块不会更改列表,但第二个代码块会更改列表.
a = [1,2,3]
for el in a:
el += 5
Run Code Online (Sandbox Code Playgroud)
这留下a了[1,2,3].如果我跑,那就说
a = [1,2,3]
for i in range(len(a)):
a[i] += 5
Run Code Online (Sandbox Code Playgroud)
然后a = [6,7,8].我的猜测是,在第一个,循环元素el是一个临时变量,而不是实际上引用列表中的元素.不知道为什么递增它不会影响列表.
目前我有以下代码来定义函数f.
a = #something
b = #something
c = #something
def f(x):
"""Evaluates some function that depends on parameters a, b, and c"""
someNumber = #some calculation
return someNumber
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会这样做def f(x, a, b, c),但我最小化f,xSciPy的优化工具箱不允许最小化参数中的参数函数.那就是说我想为a, b和的多个值运行我的最小化代码c.有没有办法可以做到这一点?
我有一个features具有以下值的熊猫系列(features.values)
array([array([0, 0, 0, ..., 0, 0, 0]), array([0, 0, 0, ..., 0, 0, 0]),
array([0, 0, 0, ..., 0, 0, 0]), ...,
array([0, 0, 0, ..., 0, 0, 0]), array([0, 0, 0, ..., 0, 0, 0]),
array([0, 0, 0, ..., 0, 0, 0])], dtype=object)
Run Code Online (Sandbox Code Playgroud)
现在我真的希望将其识别为矩阵,但是如果我这样做
>>> features.values.shape
(10000,)
Run Code Online (Sandbox Code Playgroud)
而不是(10000, 3000)我所期望的。
如何将其识别为2d而不是将数组作为值的1d数组。另外为什么它不自动将其检测为二维数组?
我有一些看起来大致像的代码
class Foo:
def __init__(self, a, b, c=None):
self.bar = a
if c:
self.data = self.calc(b, c)
def calc(self, bat, baz):
"""calculates some stuff that feels like should belong with the instance of `Foo`"""
Run Code Online (Sandbox Code Playgroud)
在我的里面有代码不__init__好吗?
如果我有一个方法可以生成一些与类实例相关的数据,让用户调用该方法并存储数据,还是让一个实例变量在实例化时存储它是更好的做法?
2 的原因是因为我有这个类,所有东西都可以从某个json文件生成,所以这个类应该只有一个实例变量和一堆方法吗?这甚至不应该是一个类吗?我一直认为具有一个实例变量的类是不好的做法,但另一方面,我有一组函数都在同一个json文件上运行,因此它们觉得它们应该属于某个集团结构。
编辑:作为与 2 相关的第三个问题,如果某些方法需要依赖于初始化数据和计算数据的数据怎么办。所以在上面的例子中,假设我(用户)计算d=2*a+b是因为我感兴趣。然后我想做另一个计算,如果我给它理论上会加速d。所以一个看起来像的方法new_calc(self, d)。我应该d在最初计算时将其存储在类中,然后不向用户索要,还是应该让他们更负责?
class foo:
def __init__(self, data):
self.data = data
def __len__(self):
return self.data
Run Code Online (Sandbox Code Playgroud)
如果我通过传入一个字符串来运行它,因为data我在调用len此类的实例时遇到错误.具体来说,我得到'str' object cannot be interpreted as an integer.
那么return语句__len__必须是整数吗?我想如果我压倒它,它应该能够输出我想要的任何东西,为什么这不可能呢?
我经常只需要打开文件即可阅读文本,并对文本进行一些分析,如以下示例所示。
with open('foo/bar.txt') as f:
text = f.read()
good_stuff = analyze(text)
Run Code Online (Sandbox Code Playgroud)
我的问题是,该good_stuff行是否需要缩进?据我了解,该with块存在以自动建立和拆除某些流程。如果这就是全部操作,那么一旦有了text变量,我就很好了,不再需要进入代码with块了,对吗?
如果我有很多周围的代码,这可能导致缩进,这很烦人。我试过不缩进,它似乎可行,但我从未见过有人写过
with open('foo/bar.txt') as f:
text = f.read()
good_stuff = analyze(text)
Run Code Online (Sandbox Code Playgroud)
所以我很好奇这是否有某些原因或标准,或者也许我还没有注意到这引起的一些副作用。