在Python中,在列表中的任意索引处设置元素?

2024-10-03 17:28:45 发布

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

我知道,使用Python中的列表,通常可以而不是在任意索引处设置列表中元素的值;在本例中,即使我尝试在新创建的列表的索引5处插入,我也只会在下一个可用索引处追加值:

$ python3
Python 3.8.5 (default, Jul 21 2020, 11:59:41)  [GCC 10.1.0 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> aa=[]
>>> aa[0]=1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> aa.insert(5, 100)
>>> aa
[100]
>>> aa.insert(5, 100)
>>> aa
[100, 100]

但是,假设我有像“3:17”、“5:72”这样的对,其中第一个数字是索引,第二个数字是值——它们是从某个源(比如数据库)随机输入的,我想用它们填充一个列表

理想情况下,我会设想一个方法,让我们调用它pseudoset,它的签名如下:

list.pseudoset(index, value, value-for-not-yet-existing-indices)

。。。因此,如果我们有:

mylist = []
mylist.pseudoset(3, 17, None)

。。。我会以mylist成为[None, None, None, 17]而告终;如果在此之后我发布:

mylist.pseudoset(5, 72, None)

。。。我会以mylist成为[None, None, None, 17, None, 72]而告终;如果在此之后我尝试:

mylist.pseudoset(1, 32, None)

。。。我会以mylist成为[None, 32, None, 17, None, 72]而告终

但是,我不知道Python中有这样的list方法

以下是作为(失败)代码的示例,使用insert

incoming_data = [ "3:17", "5:72", "1:32" ]

incoming_list = []
for pair in incoming_data:
  lpair = pair.split(":")
  theindex = int( lpair[0] )
  thevalue = int( lpair[1] )
  incoming_list.insert(theindex, thevalue)

print(incoming_list) # prints: [17, 32, 72]

因此,这里的输出是[17, 32, 72],但它应该是[None, 32, None, 17, None, 72](或者对于列表中未指定/尚未指定的元素,除了None之外的任意值)。另外,最终输出应该是list,而不是OrderedDict或其他类

我可以用Python来做这件事吗?如果可以,怎么做


Tags: innone元素列表forindex数字list
1条回答
网友
1楼 · 发布于 2024-10-03 17:28:45

只需使用dict,然后转换为您需要的列表:

>>> incoming_data = [ "3:17", "5:72", "1:32" ]
>>> data = {}
>>> for item in incoming_data:
...     i, value = map(int, item.split(':'))
...     data[i] = value
...
>>> data
{3: 17, 5: 72, 1: 32}
>>> max_i = max(data)
>>> data = [data.get(i, 'default') for i in range(max_i + 1)]
>>> data
['default', 32, 'default', 17, 'default', 72]

相关问题 更多 >