【问题标题】:How can I set an if statement when all the items in a list of lists equal one value?当列表列表中的所有项目都等于一个值时,如何设置 if 语句?
【发布时间】:2015-12-05 03:16:48
【问题描述】:

我正在尝试编写一个场景,其中列表列表中的每个值都相同。

在这种情况下,这是我的列表最初的样子。

value = []
for i in range(10):
    value.append([])
    for j in range(10):
        value[i].append(0)

这将创建一个如下所示的列表:(无论如何都是它的一部分)

>>> [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0...

然后我让它以某种方式随机化,随机值变为 1 以显示状态变化。

所以它看起来像:

>>> [[0, 1, 0, 1, 0, 1, 0, 0, 0, 1], [1, 1, 1, 0, 0, 1, 0, 1, 0, 1], [0, 0, 0, 0, 1...

所以这就是我想要做的。 当每个列表中的每个值都改回 0 时,我想要某种方法来确定它们都等于 0。

这样可以像if语句一样使用,当所有的都为0时,就会触发一些事情发生,比如执行另一个由此引起的函数。

我曾考虑过使用all() 函数,但这似乎不太好用:

if all(i=True in range(all(j==0 in value[i][j]))): 
    if all(i==0 for value[j] in value for j in value)

【问题讨论】:

  • 您的无效代码在哪里?这没什么帮助。
  • @KevinGuan 我试过这样的事情:if all(i=True in range(all(j==0 in value[i][j]))):if all(i==0 for value[j] in value for j in value)
  • 其中第一个有一个会导致语法错误的赋值,没有for(可能是另一个语法错误),并且在对all()的调用中是不可迭代的。它甚至没有意义。第二个也差远了。我建议看看official Python tutorial

标签: python list python-3.x nested-lists


【解决方案1】:

是的,你可以使用all()

if all(item==0 for item in sublist):

或者你可以使用set:

if set(sublist) == {0}:

如果您要查找整个结构中的每个子列表何时为 0,则如下所示:

if all(item==0 for sublist in structure for item in sublist):

或者这个:

if {item for sublist in structure for item in sublist} == {0}:

【讨论】:

  • 我真的很喜欢“结构中的子列表中的项目”的措辞
  • @TigerhawkT3 等等,我有点困惑,在这种情况下,子列表会是我的价值列表吗?或者那会是一个结构吗?或者是一个像这样输入的子列表: value[i][j]
  • structure 就是全部,[[0, 1,...], [1, 0,...], ...]sublist 是每个嵌套对象[0, 1,...],一次取一个。
【解决方案2】:

这有点创意:

if '1' not in repr(list):

当然,这不是for 循环的一部分。但这是最有效的方法之一。

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 2015-10-01
    • 1970-01-01
    • 2022-01-20
    • 2022-11-03
    • 2020-12-10
    • 2013-04-21
    • 2019-04-11
    • 1970-01-01
    相关资源
    最近更新 更多