Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取列表中的每个奇数变量?_Python - Fatal编程技术网

Python 获取列表中的每个奇数变量?

Python 获取列表中的每个奇数变量?,python,Python,如果我用Python制作一个列表,并想编写一个只返回1到x范围内奇数的函数,我该怎么做 例如,如果列表[1,2,3,4]从1到4(4 x我的x),我想返回[1,3]。如果您想从任意列表开始: [item for item in yourlist if item % 2] 但是如果您总是从范围开始,那么范围(1,x,2)更好 例如: $ python -mtimeit -s'x=99' 'filter(lambda(t): t % 2 == 1, range(1, x))' 10000 loop

如果我用Python制作一个列表,并想编写一个只返回1到x范围内奇数的函数,我该怎么做


例如,如果列表[1,2,3,4]从1到4(4 x我的x),我想返回[1,3]。

如果您想从任意列表开始:

[item for item in yourlist if item % 2]
但是如果您总是从
范围开始,那么
范围(1,x,2)
更好

例如:

$ python -mtimeit -s'x=99' 'filter(lambda(t): t % 2 == 1, range(1, x))'
10000 loops, best of 3: 38.5 usec per loop
$ python -mtimeit -s'x=99' 'range(1, x, 2)'
1000000 loops, best of 3: 1.38 usec per loop
import numpy as nd
arr = nd.arange(1000)
odds = arr[arr%2!=0]
因此,在这种情况下,正确的方法大约比典型的错误方法快28倍

“如果这就是您所需要的,则比您所需要的更通用”解决方案:

$ python -mtimeit -s'yourlist=range(1,99)' '[item for item in yourlist if item % 2]'
10000 loops, best of 3: 21.6 usec per loop
速度只有错误样本的两倍左右,但仍然比“恰到好处”样本慢15倍以上

有什么问题吗:

def getodds(lst):
    return lst[1::2]

(假设您需要任意序列中的每一个元素……所有具有奇数索引的元素)

或者,如果要从元素值为奇数的数字列表中选择所有项目,请执行以下操作:

def oddonly(lst):
    return [x for x in lst if x % 2]
[更新:2017]

您可以使用“惰性评估”从生成器生成以下内容:

def get_elements_at_odd_indices(sequence):
    for index, item in enumerate(sequence):
        if index % 2:
            yield item
        else:
            continue
要获取奇数元素(而不是从序列开始的每个奇数偏移处的元素),可以使用更简单的方法:

def get_odd_elements(sequence):
    for item in sequence:
        if item % 2:
            yield item
        else:
            continue
这适用于任何序列或iterable对象类型。(显然后者只适用于那些产生数字的序列或ITerable…或%2计算结果为有意义的“奇数”结果的其他类型)

还要注意的是,如果我们想有效地对系列、数据帧列或底层进行操作,那么我们可以使用[1::2]切片表示法获取奇数索引处的元素,并且可以使用NumPy的“奇特索引”获取包含奇数值的每个元素

例如:

$ python -mtimeit -s'x=99' 'filter(lambda(t): t % 2 == 1, range(1, x))'
10000 loops, best of 3: 38.5 usec per loop
$ python -mtimeit -s'x=99' 'range(1, x, 2)'
1000000 loops, best of 3: 1.38 usec per loop
import numpy as nd
arr = nd.arange(1000)
odds = arr[arr%2!=0]
我将“花式索引”显示为arr[arr%2!=0],因为这将更好地概括为过滤掉每三、四或其他第n个元素;但是你可以使用更复杂的表达方式


请注意,语法arr[arr%2!=0]可能看起来有点奇怪。NumPy的神奇之处在于它超越了各种算术运算、位运算符和增广赋值运算。关键是NumPy将这些操作评估为机器代码,这些代码可以在NumPy数组上有效地矢量化。。。在底层CPU支持的任何地方使用。例如,在当今典型的笔记本电脑和台式机系统上,NumPy可以将许多算术运算计算为运算。

要使奇数/偶数的范围达到并可能包括数字n,您可以:

def odd_numbers(n):
    return range(1, n+1, 2)
def even_numbers(n):
    return range(0, n+1, 2)
如果您想要一个通用算法,从序列中获取具有奇数索引的项,可以执行以下操作:

import itertools
def odd_indexes(sequence):
    return itertools.islice(sequence, 1, None, 2)
def even_indexes(sequence):
    return itertools.islice(sequence, 0, None, 2)

谢谢你,工作!你不会碰巧也能在偶数方面帮助我,对吗?><代码>范围(0,x,2)
将适用于晚上(包括0;s/0/2/如果要排除0)。嗯。。。要获得偶数,可以是:范围(0,x,2)或返回[x代表列表中的x,如果不是x%2]。。。伙计!你至少要试着理解我们告诉你的!您需要[1,2,3,4][0::2]