如果我有列表
lst = ['a', 'k', 'b', 'c', 'k', 'd', 'e', 'g']
,我想拆分成不带'k'的新列表,并将其变成一个元组。所以我得到
(['a'],['b', 'c'], ['d', 'e', 'g'])
我正在考虑先使用for循环将它们分成不同的列表。
new_lst = []
for element in lst:
if element != 'k':
new_ist.append(element)
这确实删除了所有的“ k”,但它们都在一起。我不知道如何将它们分成不同的列表。要将列表变成元组,我需要在列表内创建一个列表
a = [['a'],['b', 'c'], ['d', 'e', 'g']]
tuple(a) == (['a'], ['b', 'c'], ['d', 'e', 'g'])
True
所以问题是如何将列表分为带有子列表的列表。
答案 0 :(得分:5)
您很近。您可以附加到另一个名为sublist
的列表,如果找到k
,则将sublist
附加到new_list
:
lst = ['a', 'k', 'b', 'c', 'k', 'd', 'e', 'g']
new_lst = []
sublist = []
for element in lst:
if element != 'k':
sublist.append(element)
else:
new_lst.append(sublist)
sublist = []
if sublist: # add the last sublist
new_lst.append(sublist)
result = tuple(new_lst)
print(result)
# (['a'], ['b', 'c'], ['d', 'e', 'g'])
如果您喜欢冒险,也可以使用groupby
。想法是将元素分组为“ k”或“ non-k”,并在该属性上使用groupby
:
from itertools import groupby
lst = ['a', 'k', 'b', 'c', 'k', 'd', 'e', 'g']
result = tuple(list(gp) for is_k, gp in groupby(lst, "k".__eq__) if not is_k)
print(result)
# (['a'], ['b', 'c'], ['d', 'e', 'g'])
感谢@YakymPirozhenko提供更简单的生成器表达式
答案 1 :(得分:3)
tuple(list(i) for i in ''.join(lst).split('k'))
输出:
(['a'], ['b', 'c'], ['d', 'e', 'g'])
答案 2 :(得分:1)
smallerlist = [l.split(',') for l in ','.join(lst).split('k')]
print(smallerlist)
输出
[['a', ''], ['', 'b', 'c', ''], ['', 'd', 'e', 'g']]
然后,您可以检查每个子列表是否包含“
smallerlist = [' '.join(l).split() for l in smallerlist]
print(smallerlist)
输出
[['a'], ['b', 'c'], ['d', 'e', 'g']]
答案 3 :(得分:1)
这是另一种方法,使用re.split
模块中的re
和map
:
import re
lst = ['a', 'k', 'b', 'c', 'k', 'd', 'e', 'g']
tuple(map(list, re.split('k',''.join(lst))))
(['a'], ['b', 'c'], ['d', 'e', 'g'])
答案 4 :(得分:0)
如何切片,而无需附加和联接。
//This is working
using(var tc = new TestContext()){
var tempClass = person.Class;
person.Class = null;
tc.Persons.Attach(person);
person.Class = tempClass;
tc.SaveChanges();
}
答案 5 :(得分:0)
尝试一下,就可以了,不需要任何导入!
>>> l = ['a', 'k', 'b', 'c', 'k', 'd', 'e', 'g']
>>> t = []
>>> for s in ''.join(l).split('k'):
... t.append(list(s))
...
>>> t
[['a'], ['b', 'c'], ['d', 'e', 'g']]
>>> t = tuple(t)
>>> t
(['a'], ['b', 'c'], ['d', 'e', 'g'])
为什么不创建一个将列表作为参数并返回元组的方法呢?
>>> def list_to_tuple(l):
... t = []
... for s in l:
... t.append(list(s))
... return tuple(t)
...
>>> l = ['a', 'k', 'b', 'c', 'k', 'd', 'e', 'g']
>>> l = ''.join(l).split('k')
>>> l = list_to_tuple(l)
>>> l
(['a'], ['b', 'c'], ['d', 'e', 'g'])
答案 6 :(得分:0)
另一种使用 itertools 的方法
import more_itertools
lst = ['a', 'k', 'b', 'c', 'k', 'd', 'e', 'g']
print(tuple(more_itertools.split_at(lst, lambda x: x == 'k')))
给予
(['a'], ['b', 'c'], ['d', 'e', 'g'])