在Python中删除文本而不进行切片
目前正在学习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)
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,", ")