Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串向左旋转n个字符(特殊字符除外)_Python_String_For Loop - Fatal编程技术网

Python 将字符串向左旋转n个字符(特殊字符除外)

Python 将字符串向左旋转n个字符(特殊字符除外),python,string,for-loop,Python,String,For Loop,您好,我需要帮助将字符串向左旋转n次,我已经这样做了:顺便说一句,字符串是字符串列表: finaltext = "" for i in strings: first = i[0 : n] second = i[n :] i = second + first finaltext += i 然而,我不知道如何做到这一点,以便在给定的字符串中,比如说:“实习生”,空格或任何特殊字符都不会移动 s1 = "The intern" 现在我的输出是: tern中的

您好,我需要帮助将字符串向左旋转n次,我已经这样做了:顺便说一句,字符串是字符串列表:

 finaltext = ""
 for i in strings:
    first = i[0 : n] 
    second = i[n :] 
    i = second + first
    finaltext += i
然而,我不知道如何做到这一点,以便在给定的字符串中,比如说:“实习生”,空格或任何特殊字符都不会移动

s1 = "The intern"
现在我的输出是:
tern中的

我想要的输出:
in


有什么想法吗?我目前创建了一个函数,用于指示当一个特殊字符及其索引出现在字符串中时,我在for循环中使用该函数来知道当前字符是一个特殊字符,但当涉及到旋转时,如何避免该字符?这是一个有趣的问题。如何在忽略特定字符的同时旋转字符串

在这里,我们删除、旋转、重新插入字符

给定的

import collections as ct


def index(s):
    """Return a reversed dict of (char, [index, ...]) pairs."""
    dd = ct.defaultdict(list)
    for i, x in enumerate(s):
        dd[x].append(i)
    return dd


s1 = "The intern"
s2 = "Hello world!"
代码

def rotate(s, n=0, ignore=""):
    """Return string of rotated items, save ignored chars."""
    s0 = s[:]

    # Remove ignored chars
    for ig in ignore:
        s = s.replace(ig, "")

    # Rotate remaining string, eqiv. to `res = s[-n:] + s[:-n]`
    tail = s[-n:]
    head = ""

    for c in s[:-n]:         
        head += c    
    res = tail + head


    # Reinsert ignored chars
    if ignore:
        res = list(res)
        lookup = index(s0)
        for ig in ignore:
            for idx in lookup[ig]:
                res.insert(idx, ig)
        res = "".join(res)
    return res
测试

assert rotate(s1, n=0, ignore="") == "The intern"
assert rotate(s1, n=1, ignore="") == "nThe inter"
assert rotate(s1, n=1, ignore=" ") == "nTh einter"
assert rotate(s1, n=3, ignore=" ") == "ern Theint"

assert rotate(s2, n=12, ignore="") == "Hello world!"
assert rotate(s2, n=1, ignore="") == "!Hello world"
assert rotate(s2, n=1, ignore="H !") == "Hdell oworl!"
assert rotate(s2, n=1, ignore="!") == "dHello worl!"

你的问题是在问题分析和解决方案设计方面寻求帮助,而不是一个所谓的问题。你已经确定了你需要做什么;你将如何用铅笔和纸来实现这一点?我问一个问题,因为我被卡住了,我已经尝试了逻辑,但在实现这一点上遇到了困难。我所要求的只是一些方向,而不是编码的答案…创建一个只包含要旋转的字符的字符串,并创建一个数据结构来保存那些不能随给定位置旋转的字符。旋转并插入。为什么输出是以太网呢?在第二个工作包含6个字符之前,函数之后它将更改为7?对于给定的示例,旋转
n=7
?“特殊”字符的定义是什么?