【问题标题】:List Slicing and Indexes列出切片和索引
【发布时间】:2020-03-09 23:05:30
【问题描述】:

我试图弄清楚为什么输出会抓取列表中每个项目的第一个字母,而不是只抓取第一个元素(水牛翅膀)?这是我的代码的样子。

faveFoods = ['buffalo wings' , 'menudo' , 'mashed potatoes' , 'man and cheese']

for food in faveFoods:
   print('I love', food[0], 'because they are spicy')

这个输出:

I love b because it is spicy
I love m because it is spicy
I love m because it is spicy
I love m because it is spicy

【问题讨论】:

  • 如果您在循环中打印food(在单独的行中),您会明白为什么它只打印第一个字母。 (剧透:因为您要求 Python 这样做。)
  • 到底是什么问题?你做过调试吗?我强烈建议阅读以下文章:ericlippert.com/2014/03/05/how-to-debug-small-programs.
  • @AMC 我在下面用一个输出我正在寻找的代码的代码回答了我的问题,但是,它不是他们正在寻找的方式。我会看看你的链接。谢谢!
  • @GabeStrenk 你说的不是他们想要的方式是什么意思?
  • 我正在关注的课程计划是在 next.tech 上,他们有一个他们正在寻找的特定代码模式。 faveFoods\s*=\s*[([\'|\"][A-Z,a-z]*[\'|\"],\s*)*[\'|\"][A-Z,a-z]*[ \'|\"]](\n| )*for\sfood\sin\s*faveFoods:\n*( \n|\t)*( |\t)print( [\'|\"][A-Z,a-z,\'\"\,\!\?\!\@\$\%\&\>1-9]*)

标签: python arrays array-splice


【解决方案1】:

for 循环遍历 faveFoods 列表 - 这意味着每次运行 for 循环的内容时,food 的值是实际的食物 - 而不是原始列表。

faveFoods = ['buffalo wings' , 'menudo' , 'mashed potatoes' , 'man and cheese']

for food in faveFoods:
    print('I love', food[0], 'because they are spicy')
    # food is 'buffalo wings' the first time, then 'menudo', etc.
    # using [0] on that value refers to the first letter in the name instead.

相反,您可能想要引用原始列表中的元素或直接引用food

for food in faveFoods:
    print('I love', food, 'because they are spicy')

这将打印出您的 faveFoods 列表中的每个元素以及前后的文本。

但是,由于土豆泥通常不辣,您可能只想引用 faveFoods 列表的第一个元素。在这种情况下,您不需要 for 循环,而是直接引用 faveFoods 列表:

print('I love', faveFoods[0], 'because they are spicy')

从下面的评论中 - 如果你想附加一个原因,你可以使用字典来代替每个食物选项的原因:

foods = {'buffalo wings': 'because they are spicy', 
         'menudo': 'because it is a good hangover cure',
         ...
}

for food in foods:
    print('I love', food, foods[food])
    # foods[food] refers to the reason (i.e. look up <food> in the dictionary
    # given above and return the reason attached.

【讨论】:

  • 谢谢。我尝试使用 for 循环的原因是,对于每次迭代,我都会给出不同的解释来解释我为什么喜欢那个特定的项目。
  • 查看我的更新,了解如何将其作为单一结构来实现
【解决方案2】:

从问题中,很明显你不知道 for-each 语句在 python 中是如何工作的。尝试更新你的知识,它会让你免于很多头痛

您可以谷歌“Python for-each 语句”或使用Official

faveFoods = ['buffalo wings' , 'menudo' , 'mashed potatoes' , 'man and cheese']
for food in faveFoods:
    print('I love {} because they are spicy'.format(food))

如果你想输出“我喜欢水牛翅膀,因为它们很辣”,你不需要循环

print("I love {} because they are spicy".format(faveFoods[0]))

【讨论】:

    【解决方案3】:

    这给了我正在寻找的输出,我敢肯定这非常混乱且效率低下。感谢大家抽出宝贵时间回复。

    faveFoods = ['buffalo wings', 'menudo', 'mashed potatoes', 'mac and cheese']
    
    for food in range(0,len(faveFoods),4):
       print('I love', faveFoods[food], 'because they are spicy')
    for food in range(1,len(faveFoods),4):
       print('I love', faveFoods[food], 'because it is a good hangover cure')
    for food in range(2,len(faveFoods),4):
        print('I love', faveFoods[food], 'when there is gravy')
    for food in range(3,len(faveFoods),4):
        print('I love', faveFoods[food], 'when the noodles are squishy')
    

    【讨论】:

    • 绝对没有理由在这两种情况下使用for 循环。直接使用索引即可:faveFoods[0]faveFoods[1]faveFoods[2]
    猜你喜欢
    • 2021-12-18
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2015-08-21
    • 1970-01-01
    • 2022-07-21
    • 2021-08-19
    相关资源
    最近更新 更多