由于字符串在Python中是不可变的,因此我们可以实际删除重复项吗?

时间:2019-02-04 05:57:41

标签: python-3.x

以下失败,因为字符串是不可变的。我正在尝试删除重复项。有一个更好的方法吗?

$start_date = "11/22/2019";
$start_date = strtotime($start_date);
$end_date = "11/29/2020";
$end_date = strtotime($end_date);

3 个答案:

答案 0 :(得分:1)

不,不是在Python中。每次您执行“修改”字符串的操作时,实际上就是在创建一个新的,不变的字符串。

根据“就地”要求的原因或意图,您可以将字符串转换为另一种类型(字符列表,StringIO等),对其进行修改,然后将其转换回字符串

老实说,这听起来像一个面试问题。由于这种限制,Python不适用于答案。面试官可能会期望您使用C或C ++。

答案 1 :(得分:0)

没有任何事情,您可以从适当的字符串中删除重复项。这是因为字符串在Python中是不可变的。为此,您必须执行以下操作:

  1. 从字符串中创建字母列表。
  2. 创建堆栈。
  3. 如果堆栈为空,则将列表的当前元素推入堆栈。
  4. 如果堆栈的最高元素与列表的当前元素相同,则不要压入它,只需移至列表中的下一个元素即可。
  5. 如果它与最高元素不同,则将其推入。
  6. 完成所有推入操作(一次遍历所有列表元素)后,反转堆栈的内容并将其内容连接起来以形成新的字符串。
  7. 现在结果字符串不包含任何重复项。

答案 2 :(得分:0)

如果您要删除单词中每个字母的第一个出现的部分,请删除

  

例如千禧年-> milenu

您可以执行以下操作:

def remove_duplicate_letters(word):
    result = ""
    for c in word:
        if c not in result:
            result += c
    return result

您正确地注意到这不是“就位”。变量“ word”指向的字符串对象不变。由于字符串对象在Python中是不可变的,因此无法更改。而是创建一个新的字符串对象。实际上很多。一个为空字符串。然后再加上第一个字母“ m”。再次添加“ i”等等。

注意。同样,字符串是不可变的。看起来我们更改了“结果”,但是内存中正在发生的事情是,我们在每个循环中创建了一个新的字符串对象,并更改了变量“结果”指向的位置。