如何检查输入字符串是否是任何元组的任何组件的一部分

时间:2017-11-15 23:37:49

标签: python-3.x tuples

我遇到使用输入字符串并检查它是否是数据列表中元组的一部分的问题。

data = [(Mr. John Doe, 345.678.9765, johndoe@gmail.com),
        (Ms. Mary Doe, 345.123.4567, marydoe@gmail.com)]
print("Search for: ")
s = input()
while s:
   for a in data:
    if any(b[0] == s for b in a):
        print(a)
    else:
        print("Not Found")
print("Search for: ")
s = input() 

如果我输入Mr.作为输入,它将无法在元组中找到组件,但如果我输入j作为输入,它将打印出来:

 (Mr. John Doe, 345.678.9765, johndoe@gmail.com) 

1 个答案:

答案 0 :(得分:1)

如果用户输入与名称字符串完全相同的全名,则

any(b[0] == s for b in a)将仅为True(例如Mr. John Doe)。相反,使用in运算符检查用户输入是否 名称字符串的任何部分:

data = [('Mr. John Doe', '345.678.9765', 'johndoe@gmail.com'),
        ('Ms. Mary Doe', '345.123.4567', 'marydoe@gmail.com')]

print("Search for: ")

s = input()

result = None # set a variable to hold our result

for a in data:
    if any(s in b for b in a): # use in to check if substring 's' is in string 'b'
        result = a[0]  # save the name that contains user input
        break          # exit loop if found
    else:
        result = "Not Found"

print(result)

Mr.输入失败的原因是b[0]中的b[0] == s for b in a引用元组中每个字符串中的第一个字母,而3个字符的字符串永远不会等于单个字符。

同样,当我们输入j时,比较b[0] == s for b in a 匹配第一个元组的最后一个字符串中的第一个字符(j johndoe@gmail.com 1}}),所以它做了输出那个元组。

希望这有帮助。