如何在Python中迭代两个包含字符串元素的列表并附加条件

4
例如,我有两个列表如下:
a = ["there", "is", "a", "car"]
b = ["i", "feel", "happy", "today"]

我想比较a [0]b [0],如果'there'和'i'之间有任何相同的字母,则结果应为true,否则应为false。

输出:

[False,False,True,True]

如果a和b仅含有一个元素,我可以做到,但是无法遍历列表。

a = ["there", "is", "a", "car" , "jill"]
b = ["i", "feel", "happy", "today" ,"jill"]
d = []
i = 0
for  word in range(len(a)):
    for word in range (len(b)):
        c = list(set(a[i]) & set(b[i]))
    if c == []:
            d.append(False)
    else:
            d.append(True)
i = i+1
print (d)

既然问题已经得到回答并且答案已经被投票,我相信接受一个答案或者解释为什么不能接受是表现良好公民的示范。 - Amitai Irron
3个回答

4

假设您想成对执行测试,这是您的代码:

print([bool(set(x) & set(y)) for (x, y) in zip(a, b)])

您输入的列表长度不一,因此我不清楚您希望如何处理“ jill”(如果与 a 不匹配,则为 b 项未匹配)。

更多细节:

  • zip从一对列表中生成一组对(实际上它从n个列表中生成n元组的列表,但在我们的情况下n == 2)。
  • 正如您发现的那样,从字符串构造集会返回字符串中的字符的集合。
  • &作为集合运算符是集合交集
  • 从一个集合构造一个 bool 值返回该集合的非空性。
  • 简单的列表推导构建了结果。

感谢提供详细信息,Amitai。 - Naveen

3

类似这样的内容应该可以起作用:

d = [len(set(i)&set(j)) > 0 for i,j in zip(a,b)]

测试:

>>> a = ["there", "is", "a", "car" , "jill"]
>>> b = ["i", "feel", "happy", "today" ,"jill"]
>>> d = [len(set(i)&set(j)) > 0 for i,j in zip(a,b)]
>>> d
[False, False, True, True, True]
>>> 

1
其他人的回答已经足够好了,这里是您修正后的版本:
a = ["there", "is", "a", "car" , "jill"]
b = ["i", "feel", "happy", "today" ,"jill"]
d = []
i = 0
for  word in range(len(a)):
    for word in range (len(b)):
        c = list(set(a[i]) & set(b[i]))
    if c == []:
            d.append(False)
    else:
            d.append(True)
    i = i+1  # <------------------------ this was missing an indentation
print (d)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接