Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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_List_List Comprehension - Fatal编程技术网

Python 库存函数的非常简单的列表理解

Python 库存函数的非常简单的列表理解,python,list,list-comprehension,Python,List,List Comprehension,我正在制作一个游戏,它有一个玩家清单系统,清单是一个限制大小为5的列表。我通过使列表始终保持5个索引的长度来限制库存的大小,并用无类型填充空白 我想知道是否有一种更简单的方法来确定列表的长度,排除其中所有的none类型。我猜这可以用我在下面做的列表比较简单: Inventory = [1, 2, None, None, 5, None] items = [i for i in range(len(Inventory)) if Inventory[i] is not None itemCount

我正在制作一个游戏,它有一个玩家清单系统,清单是一个限制大小为5的列表。我通过使列表始终保持5个索引的长度来限制库存的大小,并用无类型填充空白

我想知道是否有一种更简单的方法来确定列表的长度,排除其中所有的none类型。我猜这可以用我在下面做的列表比较简单:

Inventory = [1, 2, None, None, 5, None]
items = [i for i in range(len(Inventory)) if Inventory[i] is not None
itemCount = len(items)
使用列表comp

>>> len([i for i in Inventory if i is not None])
3
使用
过滤器

>>> len(filter(lambda i : i is not None, Inventory))
3
filter
的工作方式是,它接受一个函数和一个列表,并根据函数删除内容。所以我可以做一个这样的函数

def checkIfNotNone(item):
    return item is not None
然后我可以使用
filter
生成以下列表

filter(checkIfNotNone, Inventory)
[1, 2, 5]
现在我可以检查
len
,它将是
3
。我做了同样的事情,但没有使用
def
编写函数,而是使用了
lambda
表达式,它基本上是一个匿名函数,我只打算在该上下文中使用

使用列表comp

>>> len([i for i in Inventory if i is not None])
3
使用
过滤器

>>> len(filter(lambda i : i is not None, Inventory))
3
filter
的工作方式是,它接受一个函数和一个列表,并根据函数删除内容。所以我可以做一个这样的函数

def checkIfNotNone(item):
    return item is not None
然后我可以使用
filter
生成以下列表

filter(checkIfNotNone, Inventory)
[1, 2, 5]

现在我可以检查
len
,它将是
3
。我做了同样的事情,但没有使用
def
编写函数,而是使用了
lambda
表达式,这基本上是一个匿名函数,我只打算在该上下文中使用。

这需要库存中非无的项目列表的长度:

len([item for item in Inventory if item is not None])
这只是计算无发生的频率,并从固定长度中减去:

5 - Inventory.count(None)

这将获取库存中非无的项目列表的长度:

len([item for item in Inventory if item is not None])
这只是计算无发生的频率,并从固定长度中减去:

5 - Inventory.count(None)

计算
None
s并从总长度中减去:

>>> Inventory = [1, 2, None, None, 5, None]
>>> len(Inventory)-Inventory.count(None)
3

计算
None
s并从总长度中减去:

>>> Inventory = [1, 2, None, None, 5, None]
>>> len(Inventory)-Inventory.count(None)
3

到目前为止,有几个答案经常使用
len(filter(…)
,这在Python 3中不起作用,因为
filter
现在返回的是生成器,而不是列表。在所有版本的Python中都可以使用的替代方法是:

sum(x is not None for x in Inventory)
这利用了
True
等于
1
False
等于
0
这一事实

但是,如果只有一种无效值(例如,
None
),RemcoGerlich建议的解决方案可能是最快的:

len(Inventory) - Inventory.count(None)

这应该很快,因为
list.count
是用C实现的,所以没有Python代码在循环中运行(就像任何列表理解或生成器表达式一样)。

到目前为止,有几个答案经常使用
len(filter(…)
在Python 3中不起作用,因为
filter
现在返回一个生成器,而不是一份清单。在所有版本的Python中都可以使用的替代方法是:

sum(x is not None for x in Inventory)
这利用了
True
等于
1
False
等于
0
这一事实

但是,如果只有一种无效值(例如,
None
),RemcoGerlich建议的解决方案可能是最快的:

len(Inventory) - Inventory.count(None)

这应该很快,因为
list.count
是用C实现的,所以没有Python代码在循环中运行(就像任何列表理解或生成器表达式一样)。

如果没有错误的值
len(filter(None,Inventory))
在您的示例中,您的列表有6个索引长。您还可以使用空列表和
追加
删除
项,检查它们的大小是否不超过5。如果没有错误值
len(过滤器(无,库存))
在您的示例中,您的列表长度为6个索引。您还可以使用空列表和
追加
删除
项,检查它们的大小是否不超过5。
len(filter(lambda x:x不是无,Inventory))
@Jacob我添加了一些关于
filter
方法的说明。请告诉我您是否仍对某些特定内容感到困惑。
len(filter(lambda x:x不是None,Inventory))
@Jacob我添加了一些关于
filter
方法的解释。让我知道你是否还有什么具体的困惑。我非常喜欢
count()
方法,只是用
len(Inventory)
概括一下。我非常喜欢
count()
方法,只是用
len(Inventory)
概括一下。