我有一个列表,每个列表包含11个字符串。最后一个字符串是一个8位数的代码,我需要保留前三位数,但删除最后五位数。
我非常确定可以使用索引和切片来完成。使用包含5个条目而不是11个条目的列表的示例。
示例=
[['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']]
Desired_Outcome =
[['a','b','c','d','202'],['e','f','g','h','199'],['i','j','k','l', '156']]
答案 0 :(得分:2)
您可以使用nested list comprehension来实现
>>> l = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']]
>>> [j[:-1]+[j[-1][:4]] for j in l]
[['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']]
这里的想法是你只抓取最后一个元素中的前4个字符。
此处j[:-1]
首先获取除最后一个之外的列表中的所有元素。 j[-1]
是最后一个元素,j[-1][:4]]
将获取最后一个元素的前4个字符。
有关这些内容的详细信息,请参阅What does "list comprehension" mean? How does it work and how can I use it?和Explain Python's slice notation。
答案 1 :(得分:2)
使用列表理解。
example = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']]
desired_outcome = [sublist[:-1] + [sublist[-1][:4]] for sublist in example]
据您所知,该字符串是不可变类型。它无法编辑。每次使用它时,您都会创建一个 new 字符串。
答案 2 :(得分:1)
您可以使用for循环和切片
对其进行编辑>>> l = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']]
>>> for sublist in l:
... sublist[4] = sublist[4][:4]
...
>>> l
[['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']]
>>>
注意:在您的5元素示例中,最终元素可以编入索引为sublist[4]
或sublist[-1]
(最后一个元素,向后计数)。两者都有效......但最好在整个计划中保持一致。
答案 3 :(得分:1)
或者,您也可以使用map()
作为:
>>> example = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']]
>>> map(lambda x: x[:3]+[x[4][:-4]], example)
[['a', 'b', 'c', '2020'], ['e', 'f', 'g', '1997'], ['i', 'j', 'k', '1566']]
以上解决方案适用于Python 2.7。如果您使用的是Python 3.x,则需要向map
明确添加list()
来电:
list(map(lambda x: x[:3]+[x[4][:-4]], example))
检查Lambda, filter, reduce and map上的博客,了解lambda
函数和map()
如何在Python中运行。
答案 4 :(得分:0)
您无法编辑字符串;它们是不可变的。
但是你可以从每个子列表的最后一项切掉不需要的部分(创建一个新的字符串):
lst = [['a','b','c','d','2020BG1C'],['e','f','g','h','1997AF33'],['i','j','k','l', '1566IL2L']]
for sublist in lst:
sublist[-1] = sublist[-1][:4]
print(lst)
# [['a', 'b', 'c', 'd', '2020'], ['e', 'f', 'g', 'h', '1997'], ['i', 'j', 'k', 'l', '1566']]
一些参考:
答案 5 :(得分:0)
其实很简单, (1)循环通过外部阵列。 (2)获取每个子数组的最后一个元素。 (3)使用x [: - 5]
对其进行切片