在python中,我该怎么做:
for car in cars:
# Skip first and last, do work for rest
Run Code Online (Sandbox Code Playgroud) 虽然这个问题在实践中没有任何实际用途,但我很好奇Python如何进行字符串实习.我注意到以下内容.
>> "string" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)
这是我所期待的.
你也可以这样做.
>> "strin"+"g" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)
这非常聪明!
但你不能这样做.
>> s1 = "strin"
>> s2 = "string"
>> s1+"g" is s2
>> False
Run Code Online (Sandbox Code Playgroud)
为什么Python不会评估s1+"g",意识到它是相同的s1并指向同一个地址?在最后一个块中实际发生了什么让它返回False?
我想知道是否:
a = "abcdef"
b = "def"
if a[3:] == b:
print("something")
Run Code Online (Sandbox Code Playgroud)
实际上是否执行了a内存中某处“def”部分的副本,或者是否就地完成了字母检查?
注意:我说的是一个字符串,而不是一个列表(我知道答案)
[1:]在C++中有没有相当于Python 的列表切片与向量?我只想从矢量中获取除第一个元素之外的所有元素.
Python的列表切片运算符:
list1 = [1, 2, 3]
list2 = list1[1:]
print(list2) # [2, 3]
Run Code Online (Sandbox Code Playgroud)
C++期望的结果:
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2;
v2 = v1[1:];
std::cout << v2 << std::endl; //{2, 3}
Run Code Online (Sandbox Code Playgroud) 我知道切片列表不会生成列表中对象的副本;它只是复制对它们的引用。
但如果是这样的话,那为什么这行不通呢?
l = [1, 2, 3]
# Attempting to modify the element at index 1
l[0:2][-1] = 10
# but the attempt fails. The original list is unchanged
l
> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
不应该l[0:2][-1]指向原始列表索引 1 处的元素吗?
我正在学习Python.我遇到了性能问题.对于单个字典,我想删除密钥if
如果,我不想删除密钥
我的密钥是唯一的字符串,大多数长度在3-50个字符之间.我正在使用的词典有100,000个或更多的项目,进行了数十亿次比较.由于这是一个O(n ^ 2)问题,我应该停止尝试优化此代码吗?还是有空间在这里取得进展?
字典是可取的,但我对其他类型开放.
例如:'hello'包含'he'和'ell'.我想在保持'你好'的同时删除'he'和'ell'键.我想在其他键的中间删除前缀,后缀和键子串.
密钥一个接一个地生成并添加到字典中.然后reduce_dict(dictionary)运行.我的假设是:在将它们添加到字典中时进行的测试与后面的函数测试一样慢,如下面的代码所示.
def reduce_dict(dictionary):
reduced = dictionary.copy()
for key in dictionary:
for key2 in dictionary:
if key != key2:
if key2 in key:
reduced.pop(key2, 0)
return reduced
Run Code Online (Sandbox Code Playgroud) 我很难理解 Python 列表切片的空间复杂性。
对于类似的东西
arr[2:] = arr[2:][::-1]
Run Code Online (Sandbox Code Playgroud)
是为切片分配了新空间(就像在字符串中完成的那样,因为它们是不可变的)还是在同一个数组上完成了操作?
对于类似的事情:
ans = [i+1 for i in range(n)]
for i in range(k):
ans[i:] = ans[i:][::-1]
Run Code Online (Sandbox Code Playgroud)
空间复杂度会是多少?它会与 ans 是字符串时不同还是相同,例如ans = '12345...n'?
我看过在线课程,他们有如下示例:
from itertools import count
# creates a count iterator object
iterator =(count(start = 0, step = 2))
# prints an even list of integers
print("Even list:",
list(next(iterator) for _ in range(5)))
Run Code Online (Sandbox Code Playgroud)
...您可以使用range或 来编写np.arange。这是另一个例子:
# list containing some strings
my_list =["x", "y", "z"]
# count spits out integers for
# each value in my list
for i in zip(count(start = 1, step = 1), my_list):
print(i)
Run Code Online (Sandbox Code Playgroud)
...这基本上只是enumerate。所以我的问题是:您能否举一个使用 无法完成(或必须更加笨拙地完成)的itertools.count示例?itertools.islicerange
根据此,蟒蛇副本引用时切片。我尝试了以下方法:
>>> a=[1,2,3]
>>> b=a[:]
>>> b[1]=0
>>> a
[1, 2, 3]
>>> b
[1, 0, 3]
>>> map(id,a)
[14508376, 14508352, 14508328]
>>> map(id,b)
[14508376, 14508400, 14508328]
Run Code Online (Sandbox Code Playgroud)
为什么不b[1]=0改变a[1](如果b[1]确实是对同一个对象的引用,人们可能会想到这种情况)?相反,它似乎会生成一个新的引用/ id并更改新的对象。在哪里我可以更详细地阅读此行为?
python ×9
list ×4
python-3.x ×2
reference ×2
slice ×2
string ×2
c++ ×1
dictionary ×1
internals ×1
performance ×1
vector ×1