比较列表中的多个唯一字符串

3 投票
5 回答
674 浏览
提问于 2025-04-17 19:15

编辑:我使用的是Python 2.7

我有一个'矩阵',如下所示,里面包含多个字符串列表。我想从这个矩阵中筛选出只包含特定字符串的行,并把这些行打印出来。

有没有人能给我一点提示,告诉我该怎么做?

我到目前为止尝试过的:

matrix = [("One", "Two", "Three"),
("Four", "Five", "Six"),
("Seven", "Eight", "One"),
("Four", "Five", "Six"),
("One", "Three", "Six")]

for index, data in enumerate(matrix):
    if "One" and "Three" and "Six" in data:
        print data

期望的输出:

("One", "Three", "Six")

目前的实际输出:

('Four', 'Five', 'Six')
('Four', 'Five', 'Six')
('One', 'Three', 'Six')

5 个回答

0

出现这个问题的原因是你错误地使用了 and

你可以在交互式控制台里试试

"One" and "Three"

它会输出 True,因为 "One" 和 "Three" 被转换成布尔值(也就是真或假),它们被视为真的值。所以,为了让这个条件正常工作,你应该把条件改成

if "One" in data and "Three" in data and "Six" in data
2

我会用集合来处理这个问题:

matrix = [("One", "Two", "Three"),
("Four", "Five", "Six"),
("Seven", "Eight", "One"),
("Four", "Five", "Six"),
("One", "Three", "Six")]

target = {"One", "Three", "Six"}

for row in matrix:
    if target <= set(row):
         print row

这里,target <= set(row) 是在检查 target 是否是 set(row) 的一个子集。

你代码不工作的原因是因为下面这段:

if "One" and "Three" and "Six" in data:

等同于:

if bool("One") and bool("Three") and ("Six" in data):

因为 bool("One")bool("Three") 都是 True,所以整个表达式实际上就是在检查 "Six" 是否在 data 里面。

8

你的测试方法不对,你应该用 in 分别测试每个字符串:

if "One" in data and "Three" in data and "Six" in data:

and 这个操作符不会把 in 测试的部分放在一起;每个部分都是单独计算的:

("One") and ("Three") and ("Six" in data):

这就导致了 "Six" in data 的结果被返回;另外两个值肯定总是为真,因为它们都是非空字符串。

更好的方法是使用一个 集合

if {"One", "Three", "Six"}.issubset(data):

撰写回答