Python 将逗号分隔的字符串转换为列表
我想在模型中将整数列表存储为字段。由于Django中默认情况下没有为此提供字段,因此我使用名为Python 将逗号分隔的字符串转换为列表,python,django,Python,Django,我想在模型中将整数列表存储为字段。由于Django中默认情况下没有为此提供字段,因此我使用名为x的CommaseParatedIntegraterField来完成此操作。在我看来,然后我获取这个字符串并从中创建一个整数列表。当使用参数n创建模型实例时,我希望x设置为lengthn,每个元素都设置为零 模型如下: class Foo(models.Model): id = models.IntegerField(default = 0) x = models.CommaSepara
x
的CommaseParatedIntegraterField来完成此操作。在我看来,然后我获取这个字符串并从中创建一个整数列表。当使用参数n
创建模型实例时,我希望x
设置为lengthn
,每个元素都设置为零
模型如下:
class Foo(models.Model):
id = models.IntegerField(default = 0)
x = models.CommaSeparatedIntegerField(max_length = 10)
@classmethod
def create(cls, _id, n):
user = cls(id = _id)
user.class_num_shown = '0,' * n
然后我创建一个实例:
f = Foo.create(1, 4)
f.save()
从数据库中加载并将字符串转换为列表:
f = Foo.objects.get(id = 1)
x_string = f.x
x_list = x_string.split(',')
print x_list
但是这输出的是
[u'0,0,0,0',]
,而不是我想要的,即[0,0,0,0]
。如何实现所需的输出?split()的分隔符参数不是要拆分的不同字符的列表,而是整个分隔符。您的代码将只拆分“逗号空格”的出现
此外,如果需要整数而不是子字符串,则需要进行转换
最后,因为后面有逗号,所以需要从拆分中筛选空结果
>>> data = '0,0,0,0,'
>>> values = [int(x) for x in data.split(',') if x]
>>> values
[0, 0, 0, 0]
不知道为什么会发生这种情况,但如果我猜的话,您正在执行
.split()。但请您解释一下data.split(',')中x的[int(x)的语法,如果x]
?如果x
是什么意思?它们被称为这听起来可能是多余的,但是如果x
将检查x是否为真
。本例中的x是一个字符串,Python中的字符串为空时为False
,否则为True
。@RJT-这不完全正确<代码>如果x正在查找真值。基本上,它确实bool(x)=True
——在本例中,非空字符串的真值为True
——因此它是完全有效的。这是必需的,因为字符串以,
结尾,您不能执行int(None)
,这就是我的意思,但我简化了太多。谢谢你更清楚的回答。
values = map(int, '0,1,2,3,'.rstrip(',').split(','))