在列表和字符串列表中,将字符串追加到列表的正前方

Append string to list directly before it in a list of lists and strings

提问人:user22391597 提问时间:10/26/2023 最后编辑:Ynjxsjmhuser22391597 更新时间:10/26/2023 访问量:84

问:

我有一个列表和字符串列表,并希望将字符串元素附加到列表元素的正前方。下面是一个数据示例。

data = [['way','say','may','lay'], 'wake', ['hay','pay','yay'], 'lake', ['tay'], 'shake']

期望输出应如下所示:

out = [['way','say','may','lay','wake'], ['hay','pay','yay','lake'], ['tay', 'shake']]

我尝试将列表转换为数据帧并使用,但是这似乎只能部分解决我的问题。groupbycumsum()

谢谢!

Python 熊猫 列表

评论


答:

2赞 Nick 10/26/2023 #1

您可以将奇数部分和偶数部分压缩在一起,并使用这些部分的列表添加来构建所需的输出:data

out = [odd + [even] for odd, even in zip(data[0::2], data[1::2])]

输出:

[
  ['way', 'say', 'may', 'lay', 'wake'],
  ['hay', 'pay', 'yay', 'lake'],
  ['tay', 'shake']
]
1赞 Suraj Shourie 10/26/2023 #2

你总是可以遍历列表并创建你的列表,在这种情况下,即使你有多个字符串,它们也会被附加到上一个列表中:out

data = [['way','say','may','lay'], 'wake', 'wake2', ['hay','pay','yay'], 'lake', ['tay'], 'shake']
out = []
for elem in data:
    if isinstance(elem, list):
        out.append(elem)
    elif isinstance(elem, str):
        # assuming first element is always a list
        out[-1].append(elem)
print(out)

输出:

[['way', 'say', 'may', 'lay', 'wake', 'wake2'], ['hay', 'pay', 'yay', 'lake'], ['tay', 'shake']]
2赞 blhsing 10/26/2023 #3

您可以从迭代器创建一个迭代器,并将迭代器与自身压缩在一起,以便从迭代器中获取每个迭代的两个项:data

seq = iter(data)
print([[*lst, item] for lst, item in zip(seq, seq)])

这将输出:

[['way', 'say', 'may', 'lay', 'wake'], ['hay', 'pay', 'yay', 'lake'], ['tay', 'shake']]
0赞 XMehdi01 10/26/2023 #4

此代码采用一个列表,该列表最初是一个空列表,并且是另一个空列表,用于存储生成的子列表。datawords_collectedresult

它根据逻辑模式组合这些元素,并将结果存储在 中。result

输出是一个子列表列表,其中每个子列表都是通过以逻辑方式合并元素来创建的。data

data = [
    ["way", "say", "may", "lay"],
    "wake",
    ["hay", "pay", "yay"],
    "lake",
    ["tay"],
    "shake",
]
words_collected = []
result = []
for word_index in range(len(data)):
    if word_index % 2 != 0:
        words_collected.append(data[word_index])
for list_index in range(len(data)):
    if list_index % 2 == 0:
        sublist = data[list_index]
        sublist.extend([(words_collected[list_index // 2])])
        result.append(sublist)
print(result)

输出:

[['way', 'say', 'may', 'lay', 'wake'], ['hay', 'pay', 'yay', 'lake'], ['tay', 'shake']]