我有一个整数和一个列表。我想创建一个以变量开头并以列表结尾的新列表。
写a + list
我收到错误。编译器将a
作为整数处理,因此我不能使用append或extend。
你会怎么做?
答案 0 :(得分:510)
>>>var=7
>>>array = [1,2,3,4,5,6]
>>>array.insert(0,var)
>>>array
[7, 1, 2, 3, 4, 5, 6]
工作原理:
array.insert(index, value)
在指定位置插入项目。第一个参数是要插入的元素的索引,因此array.insert(0, x)
插入列表的前面,array.insert(len(array), x)
等同于array.append(x)
。否定值被视为相对的到数组的末尾。
答案 1 :(得分:503)
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li # Don't use 'list' as variable name.
[5, 1, 2, 3]
答案 2 :(得分:37)
另一种做同样的方法,
list[0:0] = [a]
答案 3 :(得分:1)
只需将列表添加到一起即可制作新列表。
list1 = ['value1','value2','value3']
list2 = ['value0']
newlist=list2+list1
print(newlist)
答案 4 :(得分:1)
基于使用timeit
模块的一些(最低)基准,似乎以下内容的性能甚至比公认的答案还要好
new_lst = [a, *lst]
与[a] + list
一样,这将创建一个新列表,而不会使lst
发生变异。
如果您打算更改列表,请使用lst.insert(0, a)
。
答案 5 :(得分:1)
您可以使用“拆箱清单”:
a = 5
li = [1,2,3]
li = [a,* li]
=> [5,1,2,3]
答案 6 :(得分:1)
>>> from collections import deque
>>> my_list = deque()
>>> my_list.append(1) # append right
>>> my_list.append(2) # append right
>>> my_list.append(3) # append right
>>> my_list.appendleft(100) # append left
>>> my_list
deque([100, 1, 2, 3])
>>> my list[0]
100
[注意]:
collections.deque
比Python纯list
循环 Relevant-Post 更快。
答案 7 :(得分:0)
这些都不适合我。我将第一个元素转换为系列(单个元素系列)的一部分,并将第二个元素转换为系列,并使用了附加函数。
/**
* Converts ORM like objects from the request from arrays to objects.
*
* @param string $key
*
* @return AbstractEntity
*/
private function convertRequestToObj(string $key)
{
$ar = filter_input($this->inputType, $key, \FILTER_DEFAULT, \FILTER_REQUIRE_ARRAY);
$baseObj = new $this->objMapping[$key]();
$this->mapArrayToObj($ar, $baseObj);
return $baseObj;
}
private function mapArrayToObj(array $ar, AbstractEntity $baseObj)
{
foreach ($ar as $column => $value) {
$reflection = new \ReflectionClass($baseObj);
$method1 = 'add' . ucfirst($column);
$method2 = 'set' . ucfirst($column);
$methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC);
if (is_array($value)) {
$newObj = new $this->objMapping[$column]();
$this->addObjectTo($methods, $method1, $method2, $baseObj, $newObj);
$reflection = new \ReflectionClass($newObj);
$methods = $reflection->getMethods(\ReflectionMethod::IS_PUBLIC);
foreach ($value as $subCol => $subVal) {
$method2 = 'set' . ucfirst($subCol);
if (is_array($subVal)) {
if (is_numeric($subCol)) {
$this->mapArrayToObj($subVal, $newObj);
}
} else {
$this->parseSimpleType($newObj, $column, $value, $methods, $method2);
}
}
} else {
$this->parseSimpleType($baseObj, $column, $value, $methods, $method2);
}
}
}
答案 8 :(得分:0)
list_1.insert(0,ur_data)
确保ur_data为字符串类型
因此,如果您有data= int(5)
转换为ur_data = str(data)