动态列表的布尔蟒蛇

时间:2014-05-25 07:11:35

标签: python list

这是一个非常基本的例子。我想保留变量/标志列表,但我知道列表是不可变的。在下面的示例中,我可以简单地将一个新元组附加到hasmoustache(以日志类型的方式),但列表hasmoustache将继续扩展。

我有3个问题: 如何替换列表中某个元组中的元素(参见下面的例子中的注释) - 比如在hasmoustache中更改包含sam和sarah的元组中的bole? 知道列表是不可变的是好的做法吗? 是否有其他/更清洁的方法来保留有限的旗帜清单?

hasmoustache=[('jon',False,'Male'),('sam',False,'Male'),('sarah',False,'Female')]
# hasmoustache is list of tuples describing (name,has a moustache?,gender)

name = 'Joe'
gender = 'Male'
if name not in hasmoustache:
    append hasmoustache.((name,False,gender))

for y in hasmoustache:
    print y

barber=[('jon',1),('sam',8),('sarah',10)]
# barber is a list of tuples describing (name,number of weeks since last visit to the barber)
for m in barber:
    if m[1]>4
        # Do something to change tuple with name=m[0] in hasmoustache to True
        # List in python are immutable so how to do it?

callthem = [x[0] for x in hasmoustache if x[1]]

for y in callthem:
    print y

for y in hasmoustache:
    print y

输出应显示: (' jon',False,'男') (' sam',False,'男') (' sarah',False,'女') (' Joe',False,'男') SAM 莎拉 (' jon',False,'男') (' sam',True,'男') (' sarah',True,'女性') (' Joe',False,'男')

1 个答案:

答案 0 :(得分:1)

你有点倒退。 Lists 是可变的,这意味着您可以在创建后修改它们的值Tuples 是不可变的序列类型:创建后无法修改此类对象 。如果你想拥有一个可以实现你想要的结构,你可以使用一个列表列表。

barber=[['jon',1],['sam',8],['sarah',10]]

mutable sequence types

问题1的答案。

你不能改变元组的元素,所以如果不创建一个全新的元组,并用该元组替换列表中的当前元组,你就无法达到预期的效果。

问题2.

列表不是不可变的,因此不是非事件。

问题3。

您可以使用dict使用名称作为键,如果它们都是唯一的,并将信息列表保存为值。

这是使用dict的一个例子:

barber={'jon': 1,'sam':8,'sarah': 10 }

if barber.get("sam")  > 4: # get value of sam
   print barber.get("sam")     
8

让mmststst也成为一个词典:

hasmoustache={'jon':[False,'Male'],'sam':[False,'Male'],'sarah':[False,'Female']}
barber={'jon':1,'sam':8,'sarah':10}

if barber.get("sam")  > 4:
   hasmoustache.get("sam")[0]=  True
print hasmoustache
{'sarah': [False, 'Female'], 'sam': [True, 'Male'], 'jon': [False, 'Male']}