小编lvc*_*lvc的帖子

Python列表迭代器行为和下一个(迭代器)

考虑:

>>> lst = iter([1,2,3])
>>> next(lst)
1
>>> next(lst)
2
Run Code Online (Sandbox Code Playgroud)

因此,正如预期的那样,推进迭代器是通过改变同一个对象来处理的.

在这种情况下,我希望:

a = iter(list(range(10)))
for i in a:
   print(i)
   next(a)
Run Code Online (Sandbox Code Playgroud)

跳过每个第二个元素:调用next应该使迭代器前进一次,然后循环的隐式调用应该再次前进 - 并且第二次调用的结果将被分配给i.

它没有.循环打印列表中的所有项目,而不跳过任何项目.

我的第一个想法是,这可能发生,因为循环调用iter它传递的内容,这可能会给出一个独立的迭代器 - 事实并非像我们所说的那样iter(a) is a.

那么,为什么next在这种情况下似乎没有推进迭代器呢?

python iteration iterator list

133
推荐指数
4
解决办法
20万
查看次数

Python特征向量:numpy.linalg,scipy.linalg和scipy.sparse.linalg之间的差异

Scipy和Numpy在它们之间有三个不同的函数来寻找给定方阵的特征向量,它们是:

  1. numpy.linalg.eig(a)
  2. scipy.linalg.eig(a),和
  3. scipy.sparse.linalg.eig(A, k)

特别关注我最后两个留下的所有可选参数都保留其默认值并且a/ A是实值的情况,我很好奇这三个文档之间的差异 - 特别是:

  • 为什么(3)有一个注释,它找不到所有的特征向量?
  • 为什么其他两个必须计算所有解决方案 - 他们为什么不进行k争论?
  • (1)有一个注释说明特征值没有特定的顺序返回; (3)有一个可选参数来控制订单.(2)是否对此作出任何保证?
  • (3)是否假设A稀疏?(从数学上讲,而不是表示为scipy稀疏矩阵)如果这个假设不成立,它可能是效率低下,甚至是错误的结果吗?
  • 在选择这些时,我还应该考虑其他因素吗?

python numpy scipy

15
推荐指数
2
解决办法
8666
查看次数

numpy数组的固定大小子矩阵的指数

我正在实现一种算法,它要求我在(严格二维)numpy数组中查看非重叠的连续子矩阵.例如,对于12乘12

>>> a = np.random.randint(20, size=(12, 12)); a
array([[ 4,  0, 12, 14,  3,  8, 14, 12, 11, 18,  6,  6],
       [15, 13,  2, 18, 15, 15, 16,  2,  9, 16,  6,  4],
       [18, 18,  3,  8,  1, 15, 14, 13, 13, 13,  7,  0],
       [ 1,  9,  3,  6,  0,  4,  3, 15,  0,  9, 11, 12],
       [ 5, 15,  5,  6,  4,  4, 18, 13, 10, 17, 11,  8],
       [13, 17,  8, 15, 17, 12,  7,  1, 13, …
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

12
推荐指数
3
解决办法
3180
查看次数

为什么__new__是静态方法而不是类方法?

根据文件,

__new__() 是一个静态方法(特殊的,因此您不需要声明它),它将请求实例的类作为其第一个参数.

它显然不是类方法,但通常看起来像一个,除了手动调用的任何客户端__new__需要显式传入类参数.例如:

>>> str.__new__()
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    str.__new__()
TypeError: str.__new__(): not enough arguments
>>> str.__new__(str)
''
Run Code Online (Sandbox Code Playgroud)

但是替代对象创建API -例如,所有八个备选datetime构造 - 平时classmethodS,SO是datetime.now()按预期工作.

为什么这样__new__设置?

python

8
推荐指数
0
解决办法
921
查看次数

Python functools.namedtuple

我知道它的存在和目的collections.namedtuple,但我注意到,至少在IDLE(3.2.2)中,这个工厂函数也在functools:

>>> import functools
>>> functools.namedtuple
<function namedtuple at 0x024B41E0>
Run Code Online (Sandbox Code Playgroud)

它也collections按预期存在,并且功能相同:

>>> import collections
>>> collections.namedtuple is functools.namedtuple
True
Run Code Online (Sandbox Code Playgroud)

没有我能找到的文档提到namedtuple除了集合以外的任何地方.那么:这个标准,还是只是一种空洞的怪异?如果它只是空闲,它是一个错误还是一个为什么会namedtuple出现在两个地方 - 实际上,在functools所有地方它的歪曲心态是否有意义?

python python-idle

6
推荐指数
1
解决办法
276
查看次数

逐行组合列表(Python)

假设我有3个不同的列表

col1 = ['2006-03-28','2006-04-05','2006-04-06']
col2 = ['IBM', 'MSFT', 'IBM']
col3 = [1000, 1000, 500]
Run Code Online (Sandbox Code Playgroud)

将这些列表组合在另一个列表中的最有效方法是什么,如下所示:

col = [('2006-03-28', 'IBM', 1000),
       ('2006-04-05', 'MSFT', 1000),
       ('2006-04-06', 'IBM', 500)]
Run Code Online (Sandbox Code Playgroud)

python list

5
推荐指数
1
解决办法
6652
查看次数

Python:按数组长度对二维数组进行排序?

抱歉,我不得不问,但我环顾四周,发现没有任何帮助。

问题就在这里;我有一个数组列表:

list = [["I","Am"], ["An","Array", "Within", "An Array"]]
Run Code Online (Sandbox Code Playgroud)

我想按“列表”包含的数组的长度对“列表”进行排序。

到目前为止我已经尝试过:

list.sort()

#and
def nc(x):
    return len(x)

list.sort(key=nc)
Run Code Online (Sandbox Code Playgroud)

但这些都返回“无”。我真的很感激一些帮助。先感谢您!

python sorting list

5
推荐指数
1
解决办法
4365
查看次数

模式匹配和浮点表示

我正在做一个涉及使用数值方法来解决微分方程的问题,并认为这可能是学习一些基本Haskell的好机会.我有以下重现关系:

复发关系

和初始条件u(x, 0) = x^2.我将这些翻译成Haskell(从特定问题中为a,b,c,h和k输入适当的值,并注意到u_ij被定义为u(i*h, j*k)):

u :: (Floating a, Eq a) => a -> a -> a
u x 0 = x*x
u x t = a*k / b*h * (u (x-h) (t-k)) 
      + (1 - (3*k/2*h))*(u x (t-k)) 
      + k/b * cos x
    where 
        a = 3
        b = 2
        k = 0.1
        h = 0.2

main = putStrLn (show (u 1 0.5))
Run Code Online (Sandbox Code Playgroud)

这似乎无限期地运行.我最好猜测为什么浮点表示意味着u x 0模式永远不会匹配.我习惯在其他语言中处理这个问题的方法是检查值之间的绝对差异是否在某个合适的epsilon中,但这似乎不适用于模式匹配.因此,浮点和模式匹配似乎从根本上是不兼容的.这可能是一个问题,如果是这样的话,在这样的情况下,有没有一种规范的方法来避免这种情况?

haskell

5
推荐指数
1
解决办法
86
查看次数

Python方法查找规则

我发现以下示例有点令人惊讶:

>>> class Foo:
        def blah(self):
            pass


>>> f = Foo()
>>> def bar(self):
        pass

>>> Foo.bar = bar
>>> f.bar
<bound method Foo.bar of <__main__.Foo object at 0x02D18FB0>>
Run Code Online (Sandbox Code Playgroud)

我希望绑定方法与每个特定实例相关联,并在构造时放入其中.似乎合乎逻辑的是,绑定方法必须对每个实例都不同,以便它知道将哪个实例传递给底层函数 - 实际上:

>>> g = Foo()
>>> g.blah is f.blah
False
Run Code Online (Sandbox Code Playgroud)

但是我对这个过程的理解显然是有缺陷的,因为我不希望将一个函数分配给一个类属性会把它放在那时已经创建的实例中.

所以,我的问题是双重的 -

  1. 为什么将一个函数赋值给一个类追溯适用于实例?实现此目的的实际查找规则和流程是什么?
  2. 这是由语言保证的,还是恰好发生的事情?

python python-3.x

4
推荐指数
2
解决办法
1604
查看次数

Python IndexError:列表索引超出范围

我试图让 Python 用 500 只股票的收盘价填充列表。虽然该代码似乎仅适用于少数股票,但大量股票会带来问题。Python不断给我以下错误:“ OneClose.append(Data[i][4]) IndexError: list index out of range.”我不知道如何解决这个问题。无论我在范围字段中输入什么(在本例中为 31),错误仍然存​​在。

raw = open('C:\Model\Stocks\list.txt', 'r').read()
stocks = raw.split('\n')

for stock in stocks:
    Data = ystockquote.get_historical_prices(stock, '20120501', '20120716')

# Create empty lists, quick and dirty
    OneClose = [ ]
    OneDate = [ ]

# Populate lists from downloaded data
    for i in range(1, 31):
        OneDate.append(Data[i][0])
        OneClose.append(Data[i][4])
Run Code Online (Sandbox Code Playgroud)

Data 包含:

Data = [['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos'], 
        ['2012-07-13', '86.32', '87.83', '86.32', '87.54', '1937700', '87.5'], 
        ['2012-07-13', '86.32', '87.83', …
Run Code Online (Sandbox Code Playgroud)

python indexing stocks list range

3
推荐指数
1
解决办法
3万
查看次数