enum Suit: String {
case spades = "?"
case hearts = "?"
case diamonds = "?"
case clubs = "?"
}
Run Code Online (Sandbox Code Playgroud)
例如,我该怎么做:
for suit in Suit {
// do something with suit
print(suit.rawValue)
}
Run Code Online (Sandbox Code Playgroud)
结果示例:
?
?
?
?
Run Code Online (Sandbox Code Playgroud) 我在Python中使用tkinter并遇到以下代码:
__PRE__
我想知道是否有人能解释在这种情况下枚举的含义是什么?
问题基于MSDN示例.
假设我们在独立桌面应用程序中有一些带有HelpAttribute的C#类.是否可以枚举具有此类属性的所有类?以这种方式识别课程是否有意义?自定义属性将用于列出可能的菜单选项,选择项将带到此类的屏幕实例.课程/项目的数量将缓慢增长,但我认为这样我们可以避免在其他地方列举所有课程/项目.
在Objective-C中处理大型文本文件的适当方法是什么?假设我需要分别读取每一行,并希望将每一行视为NSString.这样做最有效的方法是什么?
一种解决方案是使用NSString方法:
+ (id)stringWithContentsOfFile:(NSString *)path
encoding:(NSStringEncoding)enc
error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
然后使用换行符分隔符拆分行,然后遍历数组中的元素.但是,这似乎效率很低.有没有简单的方法将文件视为一个流,枚举每一行,而不是一次只读取它?有点像Java的java.io.BufferedReader.
我想知道当我将生成器函数的结果传递给python的enumerate()时会发生什么.例:
def veryBigHello():
i = 0
while i < 10000000:
i += 1
yield "hello"
numbered = enumerate(veryBigHello())
for i, word in numbered:
print i, word
Run Code Online (Sandbox Code Playgroud)
枚举是否是懒惰地迭代,还是将所有内容都插入第一个?我99.999%肯定它很懒,所以我可以把它当作生成器功能完全相同,还是我需要注意什么?
这些Python列表推导的R等价物是什么:
[(i,j) for i,j in zip(index, Values)]
[(i,j) for i,j in enumerate(Values)]
[(i,j) for i,j in enumerate(range(10,20))] %MWE, indexing or enumerating to
%keep up with the index, there may
%be some parameter to look this up
Run Code Online (Sandbox Code Playgroud)
输出示例
>>> [(i,j) for i,j in enumerate(range(10,20))]
[(0, 10), (1, 11), (2, 12), (3, 13), (4, 14), (5, 15), (6, 16), (7, 17), (8, 18), (9, 19)]
Run Code Online (Sandbox Code Playgroud)
我已经用R中的一些技巧解决了这个问题,但不记得了,第一个想法是itertools -pkg,但我希望找到一种更惯用的做事方式.
我有一些像这样的代码:
letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
i += 1
Run Code Online (Sandbox Code Playgroud)
我被告知有一个enumerate()函数可以为我处理"i"变量:
for i, l in enumerate(['a', 'b', 'c']):
print "%d: %s" % (i, l)
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何将两者结合起来:当有问题的列表是由元组组成时,如何使用枚举?我必须这样做吗?
letters = [('a', 'A'), ('b', 'B')]
for i, tuple in enumerate(letters):
(lowercase, uppercase) = tuple
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
Run Code Online (Sandbox Code Playgroud)
还是有更优雅的方式?
假设我有一个项目列表,我想迭代它的前几个:
items = list(range(10)) # I mean this to represent any kind of iterable.
limit = 5
Run Code Online (Sandbox Code Playgroud)
来自其他语言的Python幼稚可能会编写这个完全可用且性能良好(如果是单一的)代码:
index = 0
for item in items: # Python's `for` loop is a for-each.
print(item) # or whatever function of that item.
index += 1
if index == limit:
break
Run Code Online (Sandbox Code Playgroud)
但Python已经枚举,它很好地包含了大约一半的代码:
for index, item in enumerate(items):
print(item)
if index == limit: # There's gotta be a better way.
break
Run Code Online (Sandbox Code Playgroud)
所以我们要把额外的代码减少一半.但是必须有一个更好的方法.
如果enumerate采用另一个可选stop参数(例如,它采用这样的start参数enumerate(items, start=1):),我认为这是理想的,但下面不存在(请参阅此处枚举 …
我知道我们enumerate用于迭代列表,但我在字典中尝试过它并没有给出错误.
码:
enumm = {0: 1, 1: 2, 2: 3, 4: 4, 5: 5, 6: 6, 7: 7}
for i, j in enumerate(enumm):
print(i, j)
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
0 0
1 1
2 2
3 4
4 5
5 6
6 7
Run Code Online (Sandbox Code Playgroud)
有人可以解释输出吗?
我喜欢这种方便
for i, line in enumerate(open(sys.argv[1])):
print i, line
Run Code Online (Sandbox Code Playgroud)
在Scala中执行以下操作时
for (line <- Source.fromFile(args(0)).getLines()) {
println(line)
}
Run Code Online (Sandbox Code Playgroud) enumerate ×10
python ×5
attributes ×1
c# ×1
class ×1
dictionary ×1
enums ×1
file-io ×1
generator ×1
indexing ×1
iterator ×1
list ×1
nsstream ×1
nsstring ×1
objective-c ×1
python-3.x ×1
r ×1
scala ×1
string ×1
swift ×1