在Python中删除文本而不进行切片

在Python中删除文本而不进行切片,python,Python,目前正在学习python模块和函数,任务是简单地显示没有任何内置函数的列表(除了range()和str()),也不能使用切片表达式、列表方法或字符串方法 因此,使用我们不应该编辑的: list1 = ['q', 'w', 'e', 'r', 't', 'y'] emptyList = [] string = my_string(list1) print(string) print(my_string(emptyList)) 这是我自己做的: def my_string(first_list)

目前正在学习python模块和函数,任务是简单地显示没有任何内置函数的列表(除了
range()
str()
),也不能使用切片表达式、列表方法或字符串方法

因此,使用我们不应该编辑的:

list1 = ['q', 'w', 'e', 'r', 't', 'y']
emptyList = []

string = my_string(list1)
print(string)
print(my_string(emptyList))
这是我自己做的:

def my_string(first_list)

    my_string = "List: "

    for x in range(len(first_list)):

        my_string += str(first_list[x]) + ", "

    return my_string[:-2]
目前的产出:

List: q, w, e, r, t, y
List
正确的输出应为:

List: q, w, e, r, t, y
List:
我不应该使用的片段在第一个列表中删除了最后一个逗号,但是在第二个列表中也使用了冒号。如果不使用片段表达式,我如何删除最后一个逗号并保留冒号


我通常会问我的prac导师,但我还有一周没有课了

直截了当的方法是:不要把逗号放在第一位

基本上在每个条目前加一个逗号,除非它是第一个


我将把编码留给您学习。

处理边缘情况的标准方法是专门化:

def my_string(first_list)
    my_string = "List: "

    for x in range(len(first_list)):
        my_string += str(first_list[x]) + ", "

    # Can only crop string if it has a trailing ", "
    if first_list:
        my_string = my_string[:-2]

    return my_string
当然,有更好的方法来处理这个精确的问题(例如,对于第一个列表中的项目,
),但这是为了以后的学习



请注意,字符串(或任何不可变序列,如元组)上的
+=
在循环中是不好的,因为这是一个学习练习,所以这只能被远程接受。

您不需要使用切片。使用您自己的代码,以下操作将通过在每个元素后面加逗号来实现,除非它是最后一个元素:

def my_string(first_list):

    my_string = "List: "

    for x in range(len(first_list)):

        my_string += str(first_list[x]) 
        if x != len(first_list) - 1:
            my_string += ", "

    return my_string

list1 = ['q', 'w', 'e', 'r', 't', 'y']
emptyList = []
string = my_string(list1)
print(string)
print(my_string(emptyList))
话虽如此,我明白这是一个练习,但这绝对不是最好的方法。仅供参考,一个更具python风格的方法是:

list1 = ['q', 'w', 'e', 'r', 't', 'y']
emptyList = []
print('List: {}'.format(', '.join(list1)))
print('List: {}'.format(', '.join(emptyList)))
只要在开始时说“如果”,你就不需要很多重复的“如果”

你可以试试这个(灵感来自多恩赫的答案):


python的方法是使用
str.join
如下:

def my_string(lst):
    return "List: " + ", ".join(lst)
但由于不允许使用字符串方法,因此必须自己模拟join

由于
join
非常有用且通用,因此您可能需要为其创建一个可重用的函数:

def my_join(items, sep):
     tmpstr = ''
     for item in items:
         if tmpstr:
             tmpstr += sep
         tmpstr += item
     return tmpstr
并通过以下方式使用:

def my_string(lst):
    return "List: " + my_join(lst,", ")

如果你甚至不允许自己创建助手函数,那么你就必须将my_string和my_join的代码组合到my_string中。

Python的方法是使用join-我猜这也不允许人为地使它复杂化?你能解释一下为什么在循环中执行
+=
是不好的吗?感谢基本上是c你已经[先阅读第二个链接]。这是因为每次你添加字符串时,它都需要重建一切。这就像建造一座房子,但每次你添加一块砖,你都必须重建整个房子。显然这是个坏主意。哦,
+=
是O(n²).谢谢,我还没有读过这些问题,答案很有教育意义!没有那么简单。我找不到一个明确的答案,所以我现在就写一个。
def my_join(items, sep):
     tmpstr = ''
     for item in items:
         if tmpstr:
             tmpstr += sep
         tmpstr += item
     return tmpstr
def my_string(lst):
    return "List: " + my_join(lst,", ")