除了循环之外,还有一种简便的方法可以将这种表示形式转换为整数列表吗?
s = ['0','1','2:5','0x4']
到
list_i=[0,1,2,3,4,5,0,0,0,0]
答案 0 :(得分:3)
您可以像这样用三元运算符使用列表推导:
list_i = [i for t in s for i in ((lambda r: range(int(r[0]), int(r[1]) + 1))(t.split(':')) if ':' in t else (lambda r: [int(r[0])] * int(r[1]))(t.split('x')) if 'x' in t else (int(t),))]
或者您也可以使用for
循环:
list_i = []
for token in s:
if ':' in token:
start, end = token.split(':')
list_i.extend(list(range(int(start), int(end) + 1)))
elif 'x' in token:
number, repeat = token.split('x')
list_i.extend([int(number)] * int(repeat))
else:
list_i.append(int(token))
答案 1 :(得分:1)
不,没有。您需要分别处理特殊字符串。您需要遍历列表,检查给定元素是否为简单整数,如果是,则按原样对其进行转换。如果要考虑的元素很特殊(在您的情况下为0x4
或2:5
),则需要代码来处理它。试试这个:
oldList = ['0','1','2:5','0x4']
def isInt(val):
try:
int(val)
return True
except ValueError:
return False
def convertRange(val):
l = val.split(':')
return [x for x in range(int(l[0]), int(l[1])+1)]
def convertRepetition(val):
l = val.split('x')
return [int(l[0]) for i in range(0, int(l[1]))]
newList = []
for elem in oldList:
if ':' in elem:
newList.extend(convertRange(elem))
elif 'x' in elem:
newList.extend(convertRepetition(elem))
elif isInt(elem):
newList.append(int(elem))
print(newList)
convertRange()
和convertRepitition()
函数处理问题中提到的两种特殊情况。
答案 2 :(得分:0)
如果您可以自由地重新定义s-list的设置方式,则可以使用像这样的python语法
s = ['[0]','[1]','range(2,6)','[0]*4']
list_i = []
[exec('list_i+='+i) for i in s]
print(list_i)
# which outputs
[0, 1, 2, 3, 4, 5, 0, 0, 0, 0]