【问题标题】:how can we solve this python string problem我们如何解决这个python字符串问题
【发布时间】:2021-01-21 21:14:58
【问题描述】:

如果你有一个字符串 "MOBILE" 并且你有一个数字 n=5 ,那么从 M 开始它将迭代 5 次,这将删除 L 并显示它。 ,然后从 E 开始,它将迭代 4 次,这将删除 B 并显示它。 ,然后从 I 开始,它将迭代 3 次,这将删除 M 并显示它。 ,然后从 O 开始,它将迭代 2 次,这将删除 I 并显示它。 ,然后从 E 开始,它将迭代 1 次,这将删除 E 并显示它。 ,最后显示剩余元素O。

所以我们得到字符串 LBMIEO

这就是我想出的......我知道它完全错误......请有人指导我

string="mobile"
n=3

list1=[]
list2=[]
pos=-1

for items in string:
    list1.append(items)
    
while n>=0 :
    for i in range(0,n):
       pos=pos+1
       if pos==len(list1)+1:
            pos=0
            
    list2.append(list1[pos])
    list1.pop(pos)
    n=n-1
 

print(list2)

【问题讨论】:

  • 不确定“从 [..] 迭代 .. 次开始”背后的逻辑到底是什么……你能澄清一下吗?
  • 你的问题给出了一个代码应该做什么的例子,但没有解释它是一个例子的要求。
  • 我猜你想删除(letter index + n) % len(string)?
  • 看看collections.deque。在循环中旋转双端队列,减少位置数(5、4、3,...)并弹出/打印索引 0 处的元素
  • 用户输入一个单词和一个小于其长度的数字(位置)......这个数字应该在一个循环中并最终达到0..我们必须循环遍历字符并删除它按位置。

标签: python algorithm


【解决方案1】:

我的建议,(也是 Buran 建议的(第一个)):

from collections import deque

def f(s,n):
    d = deque(s)
    r = []
    while d:
        d.rotate(-n+1)
        r.append(d.popleft())
        n-=1
        
    return "".join(r)

assert f("MOBILE",5) == "LBMIEO"

【讨论】:

    猜你喜欢
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多