如果列表中的所有9个字符串都被替换:执行某些操作

时间:2016-11-07 16:26:27

标签: python list

标题为: 如果列表中的所有9个字符串都被替换,则应该运行任务。

以下是代码:

list = [
        ['0', '0', '0'],
        ['0', '0', '0'],
        ['0', '0', '0']
    ]

如果所有这些都被" 1"或" 2"哪个被什么取代并不重要。然后它应该运行一个任务。

那么,如果所有9个点都被" 1"或" 2"?

将所有组合向下编写的可能性太多,并将它们与列表进行比较。

5 个答案:

答案 0 :(得分:2)

这个怎么样,

s = set(item for sublist in lists for item in sublist)  # flat a list of lists into a set

if '0' not in s:
    do_something()

答案 1 :(得分:1)

您可以使用set()itertools.chain()函数来实现它:

from itertools import chain

set(chain(*my_list)).issubset('12')
#     ^    ^          ^ all items in set are either '1' or '2'
#     ^    ^ creates a single list comprising the sub-list
#     ^  uniques values in the chained list

其中my_list是您的嵌套列表。

注意:不要将list用作变量类型,因为list是内置关键字,表示Python中的list数据类型。

示例运行:

# Sample function
>>> def check_list(my_list):
...     return set(chain(*my_list)).issubset('12')
...

# Test Run:
>>> check_list([['0', '0'], ['0', '0']])
False
>>> check_list([['0', '1'], ['0', '0']])
False
>>> check_list([['1', '1'], ['1', '1']])
True
>>> check_list([['1', '2'], ['1', '2']])
True

答案 2 :(得分:0)

永远不要将变量命名为保留字,即list。但这是一个简单的方法。

l = [
        ['0', '0', '0'],
        ['0', '0', '0'],
        ['0', '0', '0']
    ]
if all(all(int(x) for x in row) for row in l):
   #do something

答案 3 :(得分:0)

要检查它们是否已被'1''2'替换,而不是其他

all(all(i in ('1', '2') for i in sublist) for sublist in list)

答案 4 :(得分:0)

我看到您的问题是如何查看所有子列表是否仅包含'1''2'

>>> mylist = [list('121'),list('111'), list('222')]
>>> mylist
[['1', '2', '1'], ['1', '1', '1'], ['2', '2', '2']]
>>> all(item in ('1', '2') for sublist in mylist for item in sublist)
True
>>> mylist[0][0] = '0'
>>> mylist
[['0', '2', '1'], ['1', '1', '1'], ['2', '2', '2']]
>>> all(item in ('1', '2') for sublist in mylist for item in sublist)
False