我想知道是否有类似的方法在for循环中执行if子句,就像在列表理解中一样。所以我希望有一个类似的结构
[ expression for item in list if conditional ]
在循环中,就像这样
for item in list if conditional:
expression
我知道我可以在下一行中添加条件,但是我想知道是否已经在for循环中构建了条件
我正在尝试检查用户输入的字符串是否包含在其他字符串的列表中,以及这些字符串的任何排列,以"*“分隔。
换句话说,这是我到目前为止拥有的代码:
user_string=raw_input("Please supply a string")
viable_entries=['this', 'that', 'something else']
if user_string in viable_entries:
print "here I'd move on with my script"
如果
在python3中创建类和对象时,我发现了一些奇怪的行为。
如果我的类非常简单,我不喜欢每次编写类时输入"self“字和构造函数,所以我创建了类'Foo‘,它复制静态变量并将它们转换为新对象的属性。
一开始,我在没有方法的情况下创建'Foo‘子类,然后一切都很好--对象是不同的。但是,在向子类添加了一个方法之后,我发现self值以某种方式指向了错误的对象。
下面是我编写的代码:
from copy import deepcopy
class Foo:
def __init__(self):
for i in filter(lambda x:
想象一下下面的代码:
class A {}
class B extends A {}
interface IA extends Iterable<A> {}
interface IB extends Iterable<B> {}
理想情况下,我希望接口IB也能够扩展IA,因为它实际上允许您检索A。
interface IB extends Iterable<B>, IA {}
甚至是
interface IB extends Iterable<B> implements IA {}
然而,编译器真的不喜欢这两个,如果这是允许的,它会使我的代码变
你是如何处理这些问题的?一个愚蠢的例子:假设我们有一个这样的列表
a = [[[1,2],[3,4]],[[5,6],[7,8]]]
我还想打印
[1,2,3,4,5,6,7,8]
我想出的方法如下:
print [b[t] for b in [c[w] for c in a for w in xrange(len(c))] for t in xrange(len(b))]
我觉得丑陋得要命。有没有更好的方法来获得同样的结果?
假设我有一个字符串s = 'BINGO';我想遍历该字符串以生成'B I N G O'。
这是我所做的:
result = ''
for ch in s:
result = result + ch + ' '
print(result[:-1]) # to rid of space after O
有没有更有效的方法来解决这个问题呢?
假设您的代码从外部源接收一个实例,而您无法控制该实例是如何创建的。该实例未实现INotifyPropertyChanged。有没有可以将其传递给的适配器,例如:
var adapter = new ChangeNotifierAdapter( instance );
使得适配器实现INotifyPropertyChanged,并且此后将针对instance的所有属性更改引发其PropertyChanged事件
我正在解决一个问题,这个问题涉及到从统一的diff补丁中验证格式。
内部格式中的变量一次可以跨越多行,因此我编写了一个生成器,它提取每一行并在完成时生成变量。
为了避免在读取统一的diff文件时重写此函数,我创建了一个生成器,在将行传递给内部格式验证器之前,从行中剥离统一的diff字符。然而,我陷入了无限循环(无论是在代码中还是在我的头脑中)。我已经将问题抽象为以下代码。我相信有更好的方法可以做到这一点。我只是不知道这是什么。
from collections import Iterable
def inner_format_validator(inner_item):
# Do s
我想迭代一个未知函数的输出。不幸的是,我不知道函数返回的是单项还是元组。这肯定是一个标准的问题,必须有一个标准的方法来处理这个问题--我现在所拥有的是相当丑陋的。
x = UnknownFunction()
if islist(x):
iterator = x
else:
iterator = [x]
def islist(s):
try:
len(s)
return True
except TypeError:
return False
for ii in iterator:
#do stuff
我对Python还比较陌生,并且学到了函数不能返回任何东西,甚至不能返回。None。在我的应用程序中,我想迭代一个列表并保存一个复杂函数的所有非None结果:
def complicated_function(x):
if x < 0:
return "a"
elif x == 3.6:
return "b"
elif x == 4:
return None # Idealy here nothing should be returned
elif x > 10:
我在使用迭代器,更具体地说是Python语言中的yield运算符。当使用测试驱动开发开始编写新的迭代器时,我想知道什么是最短的代码,可以使这个简单的迭代器测试通过:
def test():
for x in my_iterable():
pass
我能想到的最短的版本是:
def my_iterable():
for i in []:
yield i
有没有可能写一个更简单、更简短或者更美观的(pythonic)版本?
假设我有一个带lombok注释的类,比如
@Builder
class Band {
String name;
String type;
}
我知道我能做到:
Band rollingStones = Band.builder().name("Rolling Stones").type("Rock Band").build();
有没有一种简单的方法来创建Foo的对象,使用现有的对象作为模板并更改它的一个属性?
类似于:
Band nirvana = Band.builder(rollingStones).name("Nirvana"
所以我有一个数组,比如说[5,2,2,0],有没有一个函数可以返回符合条件的元素的数量?
目前我正在做这件事:
a = [5,2,2,0]
len([i for i in a if i > 0])
也有人建议使用这种方法:
sum(b > 0 for b in a)
但这实际上是一样的,只是可读性降低了一点。
有没有像这样的方法我可以使用:
def crit(x): return x > 0
a.count(criterion=crit)
我有一个或多个无序的(不可变的,可散列的)对象序列,可能有重复的对象,我想得到所有这些对象的排序序列,而不是重复的。
现在我正在使用一个集合来快速收集所有元素,丢弃重复的元素,将其转换为一个列表,然后对其进行排序:
result = set()
for s in sequences:
result = result.union(s)
result = list(result)
result.sort()
return result
它可以工作,但我不会称它为“漂亮”。有没有更好的方法?