【问题标题】:How to acces the next value in for loop如何访问for循环中的下一个值
【发布时间】:2021-10-21 17:13:31
【问题描述】:

所以我试图在一个句子中获取单词的第一个字母(不包括第一个单词,我已经解决了)。

但它会在列表中附加空格。

如果您能提供帮助,我们将不胜感激。

代码如下:

lst = []

for t in (input()):
    if t == " ":
     lst.append(t)

print(*lst, sep="")

输入1:asd dfd yjs

输出1:dy

【问题讨论】:

  • 请提供输入示例和预期输出,这不是很清楚您尝试做什么
  • 你想加入第二个单词的最后一个字符和第三个单词的第一个字符?

标签: python


【解决方案1】:

就这个:

''.join([s[0] for s in input().split()[1:]])

一步一步:

如果input() 返回asd dfd yjs

拆分字符串(more):

input().split() # output: ['asd', 'dfd', 'yjs']

子列表(more):

input().split()[1:] # output: ['dfd', 'yjs']

一行循环(more):

[s[0] for s in ['dfd', 'yjs']] # output: ['d', 'y']

子字符串(more):

s="dfd"
s[0] # output: d

concat 字符串列表 (more):

''.join(['d', 'y']) # output: dy

【讨论】:

    【解决方案2】:

    您获得空间是因为这是您所要求的。大声朗读你的代码,它可能会有意义:

    if t == " ":
        lst.append(t)
    

    如果t 是空格,则将其附加到lst

    似乎很清楚你只会得到空格。

    您希望在t 之后添加字符。使用for 循环方法有两种方法:1)如果t 是空格,则附加下一个字符; 2) 如果前一个字符是空格,则追加t。以下是您可以如何实现 #2:

    lst = []
    
    prev_char = None
    for t in (input()):
        if prev_char == " ":
            lst.append(t)
        prev_char = t
    
    print(*lst, sep="")
    

    这将打印除第一个单词之外的所有单词的第一个字符。将last_char 初始化为空格以包含第一个单词。

    【讨论】:

    • 很好,但不能很好地处理连续的空格。
    • @MikeM 可以if prev_char == " " and t != " ":
    • @MikeM 不,它没有。只是试图让事情变得简单,以解决 OP 问题的核心。
    【解决方案3】:

    你可以

    • 使用x.split()将你的句子分成单词
    • 删除第一个单词,使用切片[1:](从索引 1 到末尾)
    • 然后只保留每个单词的第一个字符并将其连接到结果字符串
    x = input(">")
    result = ""
    for word in x.split()[1:]:
        result += word[0]
    print(result)  # dy
    

    使用生成器和str.join

    x = input(">")
    result = ''.join(word[0] for word in x.split()[1:])
    

    【讨论】:

    • 旁注:创建带有循环的字符串的最佳实践是str.join(),但对于家庭作业,这并不重要。 result = ''.join(word[0] for word in x.split()[1:])
    • @wjandrea 添加了它;)
    【解决方案4】:

    你可以使用str.split:

    lst = [s[0] for s in input().split()[1:]]
    

    【讨论】:

    • (不包括第一个单词,我已经解决了)
    • 在他们的代码中似乎没有解决。
    【解决方案5】:

    一个简单的例子:

    lst = []
    get_next = False
    
    for t in input():
        if t == " ":
            get_next = True
        elif get_next:
            lst.append(t)
            get_next = False
    
    print(*lst, sep="")
    

    【讨论】:

      【解决方案6】:

      已经有很多很好的答案,这是拆分的好例子。如果您特别需要在令牌流中的特殊令牌之后收集下一个令牌,这里有一些其他选项:

      inp = "asd dfd yjs"
      lst = []
      for a, b in zip(inp[:-1],inp[1:]):
        if a == " ":
           lst.append(b)
      
      print(*lst, sep="")
      
      # With comprehensions - my choice
      print("".join([b for a, b in zip(inp[:-1],inp[1:]) if a == " "]))
      
      # With functional approach
      from functools import reduce
      from operator import add, itemgetter
      
      def has_prior_space(x):
        return x[0] == " "
      
      print(reduce(add, map(itemgetter(1), filter(has_prior_space, zip(inp[:-1], inp[1:])))))
      

      在 Python 3.10 中,将有一个新的 pairwise 迭代器专门执行这种“一次 2 次”迭代:zip(inp[:-1],inp[1:])

      【讨论】:

        【解决方案7】:

        使用数组join():

        ''.join(lst)
        

        【讨论】:

        • 替换为 lst.append(t),但没用
        • 我给+1了,你的回答没问题,问题看不懂
        猜你喜欢
        • 2010-09-24
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2013-07-10
        • 2021-09-24
        • 1970-01-01
        相关资源
        最近更新 更多