在下面的For循环中
def __str__(self):
output = " "
for i in range(len(self)):
output += (self.str_data[i] +" ")
return output
如何在不使用range&len或任何其他内置函数的情况下重写此内容?
PS:str_data在之前的init中用作类型列表的实例变量。
如果您被允许使用join(),那么您可以这样做:
def __str__(self):
return " ".join(self.str_data)
这当然是假设len(self)
将导致与len(self.str_data)
相同。
为了与你的循环完全相同,它实际上必须是:
def __str__(self):
if self.str_data:
return " " + " ".join(self.str_data) + " "
else:
return " "
新答案:(没有内置功能)
def __str__(self):
output=""
for i in self.str_data:
output+=i+" "
return output
旧答案:
可以在列表,元组,集合和字典中使用星号和双星号,*将解压缩列表/元组,**将解压缩字典。
my_array = [0,1,2,3,4,5]
print(*my_array) # unpacking list
使用join的另一种方法:
print(' '.join(map(str,my_array)))
产量
0 1 2 3 4 5
对于给定的问题:
由于return关键字只返回一个参数,我们无法解压缩列表,我们必须使用函数
def __str__(self):
return ' '.join(self.str_data)
你的意思是这样的?
class A(object):
def __init__(self, str_data):
self.str_data = str_data
def __str__(self):
return " ".join(str(s) for s in self)
def __iter__(self):
return iter(self.str_data)
if __name__ == '__main__':
print(A(["1", "2", "3", "4", "5"]))
import json
def __str__(self):
output = json.dumps(self.str_data)
output = output[1:-1].replace(',', ' ')
return output
供您考虑。
之前的答案非常好(如果你省略了内置),但这里是你所做的更接近的版本:
output = ""
array = [0,1,2,3,4,5]
for i in array:
output += "%s " % (i)
output = output[:-1]
return output
请注意,我改变了您设置输出的方式,因为我认为这样可以获得您想要的结果。就像你问它不使用任何内置,它工作得很好。
你可以使用像这样的高级函数
" ".join(map(lambda x:x+" ",self.str_data))
map应用函数为self.str_data
中的每个字符串添加空格," ".join
将每个字符串添加到起始字符串中。
但当然这些都是内置功能,它只是一个非常干净的解决方案。