Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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_Syntax - Fatal编程技术网

Python 如果列表中的某个元素不是奇数,如何不返回任何内容或跳过该元素

Python 如果列表中的某个元素不是奇数,如何不返回任何内容或跳过该元素,python,syntax,Python,Syntax,我对Python非常陌生,我很难将我的想法转换成语法 这就是我遇到的问题: 给定一个1×n数组a,编写一个函数odd(a)返回一个新数组,该数组包含索引为奇数的元素 a = np.array([1, 3, 4, 2, 5, 3, 8, 1]) odd(a) = array([3, 2, 3, 1]) 这就是我到目前为止所做的: def odd(a): return ['' if x%2==0 else x for x in a] 然而,这返回了: [1, 3, '', '', 5,

我对Python非常陌生,我很难将我的想法转换成语法

这就是我遇到的问题:

给定一个1×n数组a,编写一个函数odd(a)返回一个新数组,该数组包含索引为奇数的元素

a = np.array([1, 3, 4, 2, 5, 3, 8, 1])

odd(a) = array([3, 2, 3, 1])
这就是我到目前为止所做的:

def odd(a):
    return ['' if x%2==0 else x for x in a]
然而,这返回了:

[1, 3, '', '', 5, 3, '', 1]

如何跳过该元素?

使用
枚举
同时迭代元素及其索引,并使用条件
索引%2
提取所有奇数位置值:

import numpy as np

def odd(a):
    return [x for i, x in enumerate(a) if i % 2]

a = np.array([1, 3, 4, 2, 5, 3, 8, 1])
print(odd(a))

# [3, 2, 3, 1]
使用切片和步骤(请参见此处的参考:):


将条件移动到列表理解的末尾,在那里它过滤而不是映射:
对于if x%2==0的x。另外
x
不是元素的索引,而是元素本身。需要注意的关键是,在列表理解中,“for”之前是“if-else”,而在末尾是纯“if”。只要习惯语法就行了。@jornsharpe说得很好。通过思考如何在数学中为集合编写表达式,可以更容易地阅读和理解理解理解语法。突然,结尾带有if的符号变得直观起来。谢谢!%是什么意思?@MimiChung,它是mod运算符,基本上是查找除法运算的剩余部分。如果一个数除以2时有余数,那么这个数肯定是奇数。起初我想这样做,但我不确定如何写增量!非常感谢。
import numpy as np

odd = lambda a: [a[i] for i in range(len(a)) if i%2]

a = np.array([1, 3, 4, 2, 5, 3, 8, 1])
print(odd(a)) # -> [3, 2, 3, 1]
def odd(a):
  return a[1::2]

#=> [3 2 3 1]