【问题标题】:Why my code is printing blueberries twice ? whats wrong?为什么我的代码要打印两次蓝莓?怎么了?
【发布时间】:2020-07-21 08:25:09
【问题描述】:
b_strings = [ ]
L = [['apples', 'bananas', 'oranges', 'blueberries', 'lemons'], ['carrots', 'peas', 'cucumbers', 'green beans'], ['root beer', 'smoothies', 'cranberry juice']]
for x in L:
    for y in x:
        for z in y:
            if z == 'b':
                b_strings.append(y)

print(b_strings)

下面,我们提供了一个名为 L 的列表列表。使用嵌套迭代将每个包含“b”的字符串保存到一个名为 b_strings 的新列表中。

【问题讨论】:

  • 没有错,这正是考虑到您的代码应该发生的事情。你期待别的吗?我们无法知道。请解释您要做什么。
  • for z in y: 迭代字符串中的字符,“blueberries”中有两个“b”
  • 因为蓝莓有两个“b”字母

标签: python python-3.x data-structures python-3.7


【解决方案1】:

因为blueberries中有两个b。所以if z == 'b':会成功两次,每次都会将单词追加到b_strings

如果你只想做一次,你可以跳出循环。

for x in L:
    for y in x:
        for z in y:
            if z == 'b':
                b_strings.append(y)
                break

或者您可以使用in 运算符来检查字母,而不是循环。

for x in L:
    for y in x:
        if 'b' in y:
            b_strings.append(y)

【讨论】:

    【解决方案2】:

    或使用列表理解

    b_strings = [ ]
    
    b_strings = [value for row in liste for value in row if "b" in value]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2019-04-16
      相关资源
      最近更新 更多