Python如何检查输入字符串是否在外部嵌套字符串内?

Python how to check if input string is inside of outer nested string?

提问人: 提问时间:10/20/2023 更新时间:10/20/2023 访问量:83

问:

# ******************************************************************************************************
# Data is imported from the included awards_data.py file. Both files must remain in the same directory.
# Do not modify the code in this section.
# You may not hardcode (manually enter in the code) any other data.
from awards_data import SAG, oscars, NBR, ISA, GLAAD, NAACP
award_list_names = ['sag', 'oscars', 'nbr', 'isa', 'glaad', 'naacp']
award_list_options = [SAG, oscars, NBR, ISA, GLAAD, NAACP]
# ******************************************************************************************************

程序必须询问您要从列表列表中打印哪个列表(this)

award_list_options = [SAG, oscars, NBR, ISA, GLAAD, NAACP]

因此,如果用户输入下垂,则应从之前导入的原始 SAG 列表中打印 SAG 的值

如果相关,这是awards_data文件

SAG = ["1", "2"]

oscars = ["1", "3", "4", "5", "3", 
          "1", "6", "7", "3", "8",
          "1", "32", "3", "2"]

NBR = ["2", "9", "3", "10", "Close", "Sr.", "6"]

ISA = ["1", "11", "12", "1", "13", "Tár", "1"]

GLAAD = ["15", "16", "17", "18", "19"]

NAACP = ["8", "20", "16", "21", "22"]

对于输入垂度,输出应为:

1,2

对于输入 oscars、OSCARS、oscarS 或带空格的应为

1,3,4,5,3,1,6,7,3,8,1,32,3,2 all separated with new line
Python 列表 嵌套

评论

1赞 Daviid 10/20/2023
这回答了你的问题吗?在 python 中搜索嵌套列表的最有效方法是什么?
0赞 10/20/2023
@Daviid 不,它没有,因为我不是先寻找列表单个值,而是在寻找字符串输入何时/是否在列表组 (award_list_options) 内,然后当它匹配时,我想打印该匹配列表名称内的所有值
0赞 Daviid 10/20/2023
实际上,在您的代码中,您只需打印('asd')而不是该匹配列表名称中的所有值。
0赞 10/20/2023
是的,我尝试先打印 asd 而不是值,以使其现在更容易。但它还没有起作用,所以我无法进步。ASD目前只是一个占位符。但是,是的,我怎样才能两者兼而有之?

答:

1赞 Daviid 10/20/2023 #1

你的代码中有很多错误,你要么没有按原样发布你的代码,这使得我们给你的任何帮助都毫无用处,因为我们不在同一页面上,或者你只是忽略了插入者的错误。

  • 首先,你没有传递任何东西来解决这个问题。print_award_winners
  • 其次,in 可能会被选为全局变量,最好还是为此使用参数,也可以使字符串小写,就像Award_Selection.(lower).strip()Award_Selection'string'.lower()strip
  • 最后,该调用是缩进的,python 会抱怨,所以也要解决这个问题。print_award_winners()

这是清理后的代码。

def print_award_winners(winner):
    winner = winner.lower().strip()
    if winner in award_list_options:
        for movie in award_list_options[winner]:
            print(movie)

award_list_options = {
    "sag": ["1", "2"],
    "oscars": ["1", "3", "4", "5", "3", "1", "6", "7", "3", "8", "1", "32", "3", "2"],
    "nbr": ["2", "9", "3", "10", "Close", "Sr.", "6"],
    "isa": ["1", "11", "12", "1", "13", "Tár", "1"],
    "glaad": ["15", "16", "17", "18", "19"],
    "naacp": ["8", "20", "16", "21", "22"],
}


Award_Selection = input("Enter winner: ")
print_award_winners(Award_Selection)

最新代码:

# ******************************************************************************************************
# Data is imported from the included awards_data.py file. Both files must remain in the same directory.
# Do not modify the code in this section.
# You may not hardcode (manually enter in the code) any other data.
from awards_data import SAG, oscars, NBR, ISA, GLAAD, NAACP
award_list_names = ['sag', 'oscars', 'nbr', 'isa', 'glaad', 'naacp']
award_list_options = [SAG, oscars, NBR, ISA, GLAAD, NAACP]
# ******************************************************************************************************


def print_award_winners(winner):
    winner = winner.lower().strip()
    if winner in name_to_list_relations:
        for movie in name_to_list_relations[winner]:
            print(movie)

name_to_list_relations = dict(zip(award_list_names, award_list_options))


Award_Selection = input("Enter winner: ")
print_award_winners(Award_Selection)

了解 zip() 这里 这里

评论

0赞 10/20/2023
使用此代码,它似乎仍然没有给我任何值。这只是代码的一部分,不能发布整个代码,因为这是一个学校项目,由于学术不端行为,我不想在这里发布我的整个项目。虽然我确实在这里发布了所需的一切。
0赞 Daviid 10/20/2023
如果你有像“Close”和“Sr.”这样的大写字母,那么你不应该这样做,因为它永远不会匹配这些值,除非你还想匹配子列表中的每个元素。.lower()lower
0赞 10/20/2023
这就是为什么我想以某种方式将下垂与 SAG 相匹配,并将 SAG 作为一个整体打印。所以输入可能会下垂,但它应该知道它意味着 SAG 并打印 SAG 中的所有内容我不知道我是否正确解释了它
0赞 10/20/2023
问题是我无法将 sag 与 SAG 匹配,我可以将其设置为 .upper(),但奥斯卡列表将不起作用,因为这是小写的
0赞 Daviid 10/20/2023
这是可以做到的,但它使用得很丑陋,既然你说这是一个学校项目,那显然不是答案,你显然误解了作业。eval()
0赞 Peter 10/20/2023 #2

使用字典的快速示例,不确定它是否符合您的“作业”要求,但它应该回答您的原始问题。

import awards_data

award_list_options = {
    "SAG": awards_data.SAG,
    "oscars": awards_data.oscars,
    "NBR": awards_data.NBR,
    "ISA": awards_data.ISA,
    "GLAAD": awards_data.GLAAD,
    "NAACP": awards_data.NAACP
}


def print_award_winners(winner):
    for award, options in award_list_options.items():
        if winner.lower().strip() in map(str.lower, options):
            print(award)

print_award_winners('1')
# SAG
# oscars
# ISA

不太确定他们希望您如何从变量中打印出“SAG”,但如果您只是对选项进行硬编码,它就会起作用。也许他们只是想让你学习 if 语句(即)。SAGif '1' in SAG: print('SAG')

评论

0赞 10/20/2023
我们不允许更改award_list_options列表
0赞 Peter 10/20/2023
更新为不更改它,但是是的,这听起来不像是一个“好”的任务。
0赞 gboffi 10/20/2023 #3

您需要一个辅助数据结构

names = [n.lower() for n in ["SAG", "oscars", "NBR", "ISA", "GLAAD", "NAACP"]]

然后

def p():
    s = input('Prompt: ')).lower().strip()
    if s in names:
        print(*award_list_options[names.index(s)] sep=', ')
    else:
        print('No Matches')

更好的是,使用字典。