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

2024-10-02 20:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: 用户名称密码列表forif网站选项
2条回答

使用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)]

Python使许多事情变得简单,其中之一就是遍历列表(或迭代器)

假设这是您的列表:

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

相关问题 更多 >