在下面的For循环中
def __str__(self):
output = " "
for i in range(len(self)):
output += (self.str_data[i] +" ")
return output
如何在不使用的情况下重写使用范围& len或任何其他内置 功能?
PS:先前在 init 中将str_data用作类型列表的实例变量。
答案 0 :(得分:2)
如果您允许使用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 " "
答案 1 :(得分:1)
新答案:(没有内置功能)
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)
答案 2 :(得分:0)
你的意思是这样吗?
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"]))
答案 3 :(得分:0)
之前的答案非常好(如果你省略了内置),但这里的版本比你所做的更接近:
output = ""
array = [0,1,2,3,4,5]
for i in array:
output += "%s " % (i)
output = output[:-1]
return output
请注意,我改变了您设置输出的方式,因为我认为是为了获得您想要的结果。就像你问的那样,它没有使用任何内置功能,它运行得很好。
答案 4 :(得分:0)
import json
def __str__(self):
output = json.dumps(self.str_data)
output = output[1:-1].replace(',', ' ')
return output
供您考虑。
答案 5 :(得分:0)
您可以使用
等高级功能" ".join(map(lambda x:x+" ",self.str_data))
map应用函数为self.str_data
中的每个字符串添加空格," ".join
将每个字符串添加到起始字符串中。
但当然这些都是内置功能,它只是一个非常干净的解决方案。