在python中从列表中删除对

2024-10-01 02:19:50 发布

您现在位置:Python中文网/ 问答频道 /正文

{{i{i}给出了一个与cdffi}相同的元素对的结果。在

我该怎么做这种事呢?在

这是我到现在为止所接触到的,但它一团糟,功能不太好

def pairs(l):

    for x in range(len(l) -1,-1,-1):
        counter=0
        z=l[x][0]
        for f in range(len(l)-1,-1,-1):
            if z==(l[f][0]):
                counter+=1
        if counter%2==0:
            for i in range(x,x-1,-1):
                if z==(l[i][0]):
                   del (l[i])
        elif counter%2==1 :
            for i in range(x-1,x-2,-1):
                if z==(l[i][0]):
                    del (l[i])

    print(l)

Tags: in功能元素forlenifdefcounter
3条回答
a = ["1a", "1b", "2b", "3c", "2d", "1g", "3d", "3g"]

coeffs = [a[0][0]] # collect coefficients
for i in a[1:]:
  if i[0] not in coeffs: coeffs.append(i[0])

s = [[x for x in a if x[0] == i] for i in coeffs] # groups according to coefficients
# s = [["1a", "1b", "1g"], ["2b", "2d"], ["3c", "3d", "3g"]]

solution = [i[-1] for i in s if len(i)%2]
# ['1g', '3g']

可以根据第一个字符对列表元素进行分组,然后消除对。为此,^{}可以派上用场:

>>> a = ["1a", "1b", "2b", "3c", "2d", "1g", "3d", "3g"]
>>> a.sort()
>>> from itertools import groupby
>>> result = []
>>> for x, y in groupby(a, lambda x: x[0]):
...     y = list(y)
...     if len(y) % 2:
...         result.append(y[-1])
... 
>>> result
['1g', '3g']
def deleter(char,seq):
    if not seq or not isinstance(seq, list):
        return []
    else:
        if char==seq[0][0]:
            return function(char,seq[1:])
        else:
            return [seq[0]]+function(char,seq[1:])

我将使用recursive定义来解决它:

  • 基本情况:如果seq为空,则返回一个空列表
  • 检查大小写:如果索引0处的元素是我们讨厌的字符,则忽略它。在
  • 解决方案else return the first element in the list seq in a form of list and add to it the call of function itself

编辑: 我有一种感觉,你是一个新的程序员,如果是这样的话,我只想强调递归函数的美丽和优雅。这是一种优雅的数学解题方法。如果新程序员、前程序员和数学家熟悉离散数学中的proof by indcution,那么您的代码将非常容易被阅读。在大多数情况下,基本上遵循以下伪代码:

  • 基本情况:终止函数的条件
  • Return语句:递归返回对函数的调用 我把递归可视化的方式是你有一个问题要解决,你假设你已经创建了一个函数来解决问题(基本情况),现在你调用这个函数来解决你的问题(返回函数的调用)

相关问题 更多 >