📌  相关文章
📜  Python|将字符串范围转换为列表

📅  最后修改于: 2022-05-13 01:55:17.552000             🧑  作者: Mango

Python|将字符串范围转换为列表

有时,在应用程序中工作时,我们可能会遇到一个问题,即给我们一个简单的字符串,该字符串提供由连字符分隔的范围和由逗号分隔的其他数字。这个问题可能发生在很多地方。让我们讨论一些可以解决这个问题的方法。

方法#1:使用sum() + split() + list comprehension + enumerate()
上述功能的组合可用于执行这些任务。在这种情况下,对连字符和逗号执行拆分,因此范围、数字被提取并编译成一个列表。

# Python3 code to demonstrate working of
# Convert String ranges to list
# Using sum() + list comprehension + enumerate() + split()
  
# initializing string 
test_str = "1, 4-6, 8-10, 11"
  
# printing original string 
print("The original string is : " + test_str)
  
# Convert String ranges to list
# Using sum() + list comprehension + enumerate() + split()
res = sum(((list(range(*[int(b) + c 
           for c, b in enumerate(a.split('-'))]))
           if '-' in a else [int(a)]) for a in test_str.split(', ')), [])
  
# printing result
print("List after conversion from string : " + str(res))
输出 :
The original string is : 1, 4-6, 8-10, 11
List after conversion from string : [1, 4, 5, 6, 8, 9, 10, 11]

方法 #2:使用map() + split() + lambda
也可以使用上述功能执行此任务。类似于上面的方法。唯一的区别是我们使用 map() 和 lambda函数来降低复杂的可读性。仅适用于 Python2。

# Python2 code to demonstrate working of
# Convert String ranges to list
# Using map() + lambda + split()
  
# initializing string 
test_str = "1, 4-6, 8-10, 11"
  
# printing original string 
print("The original string is : " + test_str)
  
# Convert String ranges to list
# Using map() + lambda + split()
temp = [(lambda sub: range(sub[0], sub[-1] + 1))(map(int, ele.split('-')))\
        for ele in test_str.split(', ')]
  
res = [b for a in temp for b in a]
  
# printing result
print("List after conversion from string : " + str(res))
输出 :
The original string is : 1, 4-6, 8-10, 11
List after conversion from string : [1, 4, 5, 6, 8, 9, 10, 11]