有一个List<int>整数(例如:) 1 - 3 - 4我怎么能用这种类型的字符串转换它?
例如,输出应为:
string values = "1,3,4";
Run Code Online (Sandbox Code Playgroud) 我正在破译其他人的代码,我看到以下内容:
def get_set_string(set_):
if PY3:
return str(set_)
else:
return str(set_)
Run Code Online (Sandbox Code Playgroud)
变量后面的下划线是什么意思,或者这只是变量名称的一部分而没有任何意义?
在为Enum成员试验不同的值类型时,我发现当值是可变的时会有一些奇怪的行为.
如果我将一个值定义Enum为不同的列表,那么成员的行为仍然类似于Enum值是典型的不可变类型,如str或int,即使我可以更改成员的值,以便两个Enum成员的值相同:
>>> class Color(enum.Enum):
black = [1,2]
blue = [1,2,3]
>>> Color.blue is Color.black
False
>>> Color.black == Color.blue
False
>>> Color.black.value.append(3)
>>> Color.black
<Color.black: [1, 2, 3]>
>>> Color.blue
<Color.blue: [1, 2, 3]>
>>> Color.blue == Color.black
False
>>> Color.black.value == Color.blue.value
True
Run Code Online (Sandbox Code Playgroud)
但是,如果我将值定义为相同的列表,则每个成员的值似乎是同一个对象,因此一个成员的值的任何突变都会影响所有成员:
>>> class Color(enum.Enum):
black = [1,2,3]
blue = [1,2,3]
>>> Color.blue is Color.black
True
>>> Color.black == Color.blue
True
>>> …Run Code Online (Sandbox Code Playgroud) 将我开发的所有模块放入主程序时遇到问题.我创建的切换词典如下所示:
def Tank_Shape_Calcs(Tank_Shape, level, area, dish, radius, length, Strapping_Table, Tank_Number):
switcher = {
0: vertical.Vertical_Tank(level, area),
1: horiz.Horiz_Cylinder_Dished_Ends(dish, radius, level, length),
2: strapping.Calc_Strapped_Volume(Strapping_Table, level),
3: poly.Fifth_Poly_Calcs(Tank_Number)
}
return switcher.get(Tank_Shape, "ERROR: Tank type not valid")
Run Code Online (Sandbox Code Playgroud)
罐形状在主文件中设置为每个罐的循环.第一辆坦克Tank_Shape = 2我希望它能执行这个Calc_Strapped_Volume()功能.
我曾尝试测试它,和切换功能绝对是读书Tank_Shape的2.此外,如果我将函数更改为字符串,它将打印出正确的字符串.
问题是函数似乎是按顺序执行的,直到调用了正确的函数.这会导致错误,因为我使用的数据只能使用正确的函数.
有没有办法只执行正确的功能?
我有分隔符的字符串列表A和B:
L = ['sgfgfqds A aaa','sderas B ffff','eeee','sdsdfd A rrr']
Run Code Online (Sandbox Code Playgroud)
并需要:
L1 = [['aaa'], ['ffff'], ['eeee'], ['rrr']]
Run Code Online (Sandbox Code Playgroud)
我试过用:
L1 = [re.findall(r'(?<=A)(.*)$', inputtext) for inputtext in L]
print (L1)
Run Code Online (Sandbox Code Playgroud)
但是,它返回以下内容:
[[' aaa'], [], [], [' rrr']]
Run Code Online (Sandbox Code Playgroud)
如何获得所需的输出?
我一直在玩startswith(),我发现了一些有趣的东西:
>>> tup = ('1', '2', '3')
>>> lis = ['1', '2', '3', '4']
>>> '1'.startswith(tup)
True
>>> '1'.startswith(lis)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: startswith first arg must be str or a tuple of str, not list
Run Code Online (Sandbox Code Playgroud)
现在,错误是显而易见的,并将列表转换为元组将正常工作,就像它在第一时间做的那样:
>>> '1'.startswith(tuple(lis))
True
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是:为什么第一个参数必须是str或str前缀的元组,而不是 str前缀列表?
AFAIK,Python代码startswith()可能如下所示:
def startswith(src, prefix):
return src[:len(prefix)] == prefix
Run Code Online (Sandbox Code Playgroud)
但这让我更加困惑,因为即使考虑到它,无论是列表还是元组,它仍然不应该有任何区别.我错过了什么?
我只是注意到,如果我+在print()函数中使用连接并在shell中运行代码,文本会更快地出现.然而,在使用时,,文本看起来要慢得多,就像使用"正在输入"的动画效果一样.
这两者之间是否存在效率差异?
我想使用这些运算符的魔术方法进行bool二进制运算.例如,我可以得到a < b作为getattr(a, '__lt__')(b)或a == b作为getattr(a, '__eq__')(b).
我能得到a in b并且a is b以这样的方式?
我在下面包含的代码会引发以下错误:
NameError: name 'Vector2' is not defined
Run Code Online (Sandbox Code Playgroud)
在这一行:
def Translate (self, pos: Vector2):
Run Code Online (Sandbox Code Playgroud)
为什么Python不能Vector2在Translate方法中识别我的类?
class Vector2:
def __init__(self, x: float, y: float):
self.x = x
self.y = y
def Translate(self, pos: Vector2):
self.x += pos.x
self.y += pos.y
Run Code Online (Sandbox Code Playgroud) 我们可以(浅)复制a list使用[:]:
l = [1, 2, 3]
z1 = l[:]
Run Code Online (Sandbox Code Playgroud)
我们也可以(浅)复制它[::]:
z2 = l[::]
Run Code Online (Sandbox Code Playgroud)
现在z1 == z2将True.在阅读了Explain Python的切片表示法中的答案之后,我理解这些切片是如何工作的.
但是,我的问题是,这两者内部有什么区别吗?复制中的一个比另一个更有效,还是做同样的事情?
python ×9
python-3.x ×6
list ×4
string ×2
c# ×1
dictionary ×1
enums ×1
function ×1
getattr ×1
identity ×1
oop ×1
performance ×1
regex ×1
slice ×1
tuples ×1
type-hinting ×1