Python以一种有点棘手的方式将列表元素与条件合并

2024-09-29 02:21:26 发布

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

我有这个清单:

l=['abcdef', 'abcdt', 'neft', 'ryr', 'yyyyy', 'u', 'aaaaaaaaaa']

并且,上面列表中每个元素的长度分别是6,5,4,3,5,1,10。在

我希望以满足条件的方式组合它:新创建的列表中的每个元素的长度应该至少,也就是说,考虑下一个要组合的元素,直到达到期望的长度。将在每个连接点添加空间。在

因此,清单现在变成:

^{pr2}$

我试着根据迭代和其他方法将其组合起来,但似乎没有任何效果。有什么建议吗?在


Tags: 方法元素列表方式空间建议效果连接点
3条回答

这应该行得通,注意列表是被修改过的,如果你不想这样,就在之前复制一份。用你给的案子做了测试。在

def combine(a, n):
    i = 0
    while i < len(a):
        if len(a[i]) >= n:
            i += 1
        elif i + 1 < len(a):
            a[i:i + 2] = [a[i] + " " + a[i + 1]]
        elif len(a) > 1:
            a[i - 1:i + 1] = [a[i - 1] + " " + a[i]]
            break
        else:
            break

如果你不能使用发电机,那么它的长度就不能满足要求:

def join_while_too_short(it, length):
    it = iter(it)
    while True:
        current = next(it)
        while len(current) < length:
            current += ' ' + next(it)
        yield current

在输入上运行此选项时,将生成正确的结果:

^{pr2}$

它不会真正有效,因为它会不断地格式化字符串,您也可以将它们收集为list并在生成之前将它们连接起来,但是这个版本应该更清楚地说明原理。在


请注意,这一要求可能并不总是得到满足,因为结尾可能没有足够的项来创建所需长度的字符串。但是你说你要“考虑下一个元素,直到达到期望的长度”。而目前的方法正是这样做的。在

只需运行一次,并附加到你达到的条件应该可以正常工作。据我所知,你无法理解列表的多行操作方式,但如果Pandas是一个选项,请通过编辑您的问题让我们知道。Pandas Dataframe shift方法允许您在lambda函数中一次检查多行,并以非for循环的方式解决此问题。在

l=[ 'abcdef', 'abcdt', 'neft', 'ryr', 'yyyyy', 'u', 'aaaaaaaaaa' ]

newlist = list()
newitem = ''
for item in l:
    if len(newitem) == 0:
        newitem = item
    else:
        newitem = newitem +" "+ item
    if len(newitem) > 9:
        newlist.append(newitem)
        newitem=''

if len(newitem)>0: # grab any left over stuff that was <10 digits at the end
    newlist.append(newitem)

print (newlist)

运行python3.6的jupyter的输出如您所期望的那样

['abcdef abcdt', 'neft ryr yyyyy', 'u aaaaaaaaaa']

相关问题 更多 >