或许我应该说,跳过必须初始化的方法。
我真的很讨厌每次我想做一个简单的计数变量时,我不得不说,“嘿python,这个变量从0开始。”我希望能够说出count+=1
并让它立即知道在循环的第一次迭代中从0开始。也许我可以设计某种功能来容纳这个? count(1)
将自我创建的内部计数变量加1,该变量在循环的迭代之间徘徊。
我同样不喜欢将字符串/列表编辑成新的字符串/列表。
(在循环之前初始化new_string=""/new_list=[]
)。
我认为列表推导可能适用于某些列表。
有没有人对如何解决这个问题有一些指示?我很新,我只是编程了半年。
答案 0 :(得分:2)
如果您在for循环中使用计数器,则可以使用枚举:
for counter, list_index in enumerate(list):
计数器是语句中的第一个变量,每次循环迭代都会添加1,下一个变量是列表中该迭代的值。我希望这可以回答您的第一个问题,第二个问题,以下代码可能会有所帮助
list_a = ["this", "is"]
list_b = ["a", "test"]
list_a += list_b
print(list_a)
["this", "is", "a", "test"]
+ =也适用于字符串,因为它们本质上是列表。希望这有帮助!
答案 1 :(得分:2)
免责声明:我认为这不会使初始化更清洁。另外,如果您在计数器变量的某些用途中输入了拼写错误,则不会得到NameError
,而是会静默地创建并递增第二个计数器。记住Python的禅宗:
明确比隐含更好。
话虽如此,你可以创建一个特殊的类,它将自动添加缺少的属性,并使用这个类来创建和自动初始化各种计数器:
class Counter:
def __init__(self, default_func=int):
self.default = default_func
def __getattr__(self, name):
if name not in self.__dict__:
self.__dict__[name] = self.default()
return self.__dict__[name]
现在,您可以创建该类的单个实例,以创建任意数量的相同类型的计数器。用法示例:
>>> c = Counter()
>>> c.foo
0
>>> c.bar += 1
>>> c.bar += 2
>>> c.bar
3
>>> l = Counter(list)
>>> l.blub += [1,2,3]
>>> l.blub
[1, 2, 3]
实际上,这类似于collections.defaultdict
所做的,除了您可以使用点符号来访问计数器,即c.foo
而不是c['foo']
。想想看,它甚至可以扩展 defaultdict
,使整个事情变得更加简单:
class Counter(collections.defaultdict):
def __getattr__(self, name):
return self[name]