迭代整数列表并根据条件连接项目

Iterating over a list of integers and joining items based on a condition

我正在尝试遍历整数列表并使用 python 标准库根据条件加入它们。例如,我有一个看起来像这样的整数列表:

listOfIntegers = [0, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]

我想遍历此列表并合并值,这样结果将是以下形式的字符串:

result = '000-20-4-60-8000-1-9'

(其中包含破折号)。这样做的条件是,如果前面的数字不等于零,则必须在其前面放置一个破折号。如果下一个值等于零,它将连接到它之前的值的末尾。

一种直接的方法,从整数列表构建一个字符串,然后是一个简单的正则表达式替换:

listOfIntegers = [1, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]
inp = ''.join([str(x) for x in listOfIntegers])
result = re.sub(r'(?<=.)(?=[^\D0])', '-', inp)
print(result)  # 100-20-4-60-8000-1-9

这是一个简单的解决方案:

listOfIntegers = [0, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]

for i in listOfIntegers:
    if i != 0:
        print("-" + str(i), end="")
    else:
        print(str(i), end="")

对于列表中的每个项目,我们检查该项目是否不等于 0。如果不等于 0,我们打印出该项目并在其前面加上破折号,并使用 end 参数以避免换行。如果它是 0,我们简单地打印出该项目。

这将有助于: (考虑到给定列表中的数字是正数)

def join(lst):
    return "".join(list(map(lambda x: str(-x), lst))).lstrip('-')

listOfIntegers = [0, 0, 0, 2, 0, 4, 6, 0, 8, 0, 0, 0, 1, 9]
print(join(listOfIntegers)) # 000-20-4-60-8000-1-9

过程:

  1. 将每个元素转换为负数,其中:
    • 9 变为 -9
    • 0 没有效果,因为 -0 在 python
    • 中是 0
  2. 然后将它们转换成字符串并加入它们
  3. 确保删除尾随 hyphen,在我们的例子中 lstrip('-') 帮助我们做到这一点。

使用循环:

def func(nums):
    result = ''
    for i, num in enumerate(nums):
        if num != 0 and i != 0:
            result += '-'
        result += str(num)
    return result