范围和len函数的替代方案

问题描述 投票:1回答:6

在下面的For循环中

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

如何在不使用range&len或任何其他内置函数的情况下重写此内容?

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

python string function
6个回答
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
投票

新答案:(没有内置功能)

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)

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"]))

0
投票
import json

def __str__(self):
    output = json.dumps(self.str_data)
    output = output[1:-1].replace(',', ' ')
    return  output

供您考虑。


0
投票

之前的答案非常好(如果你省略了内置),但这里是你所做的更接近的版本:

output = ""
array = [0,1,2,3,4,5]
for i in array:
   output += "%s " % (i)
output = output[:-1]
return output

请注意,我改变了您设置输出的方式,因为我认为这样可以获得您想要的结果。就像你问它不使用任何内置,它工作得很好。


0
投票

你可以使用像这样的高级函数

" ".join(map(lambda x:x+" ",self.str_data))

map应用函数为self.str_data中的每个字符串添加空格," ".join将每个字符串添加到起始字符串中。

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

© www.soinside.com 2019 - 2024. All rights reserved.