检查项目是否在列表列表中

时间:2019-02-27 08:16:31

标签: python python-3.x list loops

我正在制作密码保护程序,并且有一个用于测试目的的预定列表,

passwords = [["yahoo","XqffoZeo"],["google","CoIushujSetu"]]

我给用户许多选择。选择#2让他们可以选择查找密码

if choice == '2':  # Lookup a password
    print("Which website do you want to lookup the password for?")
    for keyvalue in passwords:
        print(keyvalue[0])
    passwordToLookup = input()

我需要弄清楚的是:

  1. 设置一个循环,该循环使用FOR循环遍历列表列表中的所有项目。有人告诉我,考虑列表列表的最佳方法是使用Excel电子表格。对于我的密码列表,我从2行2列数据开始(不考虑用户可能添加的任何密码)。因此,passwords [0] [0]将等于第1行第1列的项目(在我的情况下为“ yahoo”)。有人告诉我使用range()和len()的组合,这样我就可以遍历每个“行”,而不管列表有多长。但是,我不确定如何做到这一点。
  2. 一旦我正确设置了FOR循环,就需要遍历每个“行”,并使用条件逻辑(例如“ if ...”)将用户的passwordToLookup输入与相应的网站名称进行比较。因为我知道网站名称存储在第一个“列”中,所以它可能看起来像这样:passwords [i] [0]。但是再次,我所有的尝试都失败了,我需要指导。

2 个答案:

答案 0 :(得分:0)

使用filter,可以在列表中选择匹配的元素。

使用列表理解,选择每个元素的第二个元素(密码)。

passwords = [["yahoo","XqffoZeo"],["google","CoIushujSetu"]]
website_to_lookup = input()
[e[1] for e in filter(lambda i:i[0]==website_to_lookup,passwords)]

如果每个网站的密码不只一个,请使用切片将其全部归还:[e[1:] for e in filter(lambda i:i[0]==website_to_lookup,passwords)]

答案 1 :(得分:0)

Python使许多事情变得容易,其中之一是遍历列表(或Iterator)

假设这是您的列表列表:

passwords = [["yahoo","XqffoZeo"],["google","CoIushujSetu"], ['StackOverflow','uesodsiom'], ['Facebook', 'sdhf9wk']]

您可以遍历如下列表:

for lst in passwords:
        print(lst)
['yahoo', 'XqffoZeo']
['google', 'CoIushujSetu']
['StackOverflow', 'uesodsiom']
['Facebook', 'sdhf9wk']

在这种情况下,您不需要range或len,尽管在其他情况下它们可能会有用。

如果只希望嵌套列表中的一个元素是您的网站,该怎么办?然后您可以索引:

for lst in passwords:
        print(lst[0])

yahoo
google
StackOverflow
Facebook

如果需要密码,请使用lst [1]。索引从0开始。

请注意,列表的结构应保持不变:第一个元素是网站名称,第二个元素是密码。

现在,据我了解,您要检查某个网站是否与密码匹配

第一种方法:

website = 'Facebook'
passwordToLookup = 'sdhf9wk'

for lst in passwords:
    if lst[0] == website and lst[1] == passwordToLookup:
        print(True)
True

解压缩密码列表中每个元素的第二种方法:

for websi, password in passwords:
    if websi == website and password == passwordToLookup:
        print(True)

True

开箱示例:

x, y =  [1, 2]
print(x)
1
print(y)
2