范围和len函数的替代方案

时间:2017-04-25 02:46:07

标签: python string function

在下面的For循环中

def __str__(self):
    output = " "
    for i in range(len(self)):
        output += (self.str_data[i] +" ")
    return  output

如何在不使用的情况下重写使用范围& len或任何其他内置 功能

PS:先前在 init 中将str_data用作类型列表的实例变量。

6 个答案:

答案 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将每个字符串添加到起始字符串中。

但当然这些都是内置功能,它只是一个非常干净的解决方案。