检查列表中的元素是否在定义的位置具有值
Check if an element in a list has a value in a defined position
我正在寻找一种自动化流程的方法,我只在列表值的特定位置添加具有特定值的元素。我知道这听起来很复杂,但我试图在这个微不足道的例子中更好地解释自己:
我有所有这些索引:
["0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"]
我想对位置 x 为 0 或 1 且位置 y 为 0 或 1 的所有索引求和。在这种情况下,我想对它们在索引
中位置 1(从右起)的 0 和位置 0(从右起)的 1 的所有计数求和
"01": counts["0001"] + counts["0101"] + counts["1001"] + counts["1101"]
为了更容易理解,在这种情况下,我对索引中位置 1(从右)为 1 和位置 0 为 0 的所有计数求和。
"10": counts["0010"] + counts["0110"] + counts["1010"] + counts["1110"]
我可以在 Python 中找到自动化来执行此操作吗?
编辑:
我会尝试更具体:
counts = {'0001': 0.0001220703125, '0010': 0.000244140625, '0100': 0.0003662109375, '0101': 0.245849609375, '0110': 0.2486572265625, '0111': 0.000244140625, '1000': 0.0009765625, '1001': 0.2508544921875, '1010': 0.252197265625, '1101': 0.00048828125, '0000': 0.0, '0011': 0.0, '1011': 0.0, '1100': 0.0, '1110': 0.0, '1111': 0.0}
例如,我需要的是获取中间为 00 的所有索引(位置 1 和 2)。所以我需要 select: '0001', '1000', '1001', '0000' 其中在位置 1 中包含 0,在位置 2 中包含 0。我想对所有这些值求和。 '1101'不好,因为按顺序包含,位置0为1,位置1为0,位置2为1,位置3为1.
我唯一知道的是我想要的值(它们是 2,可以取值 0 或 1)和它们的位置(即 0 或 1 或 2,或 3)。
我希望我说清楚了
我假设你的索引是字典。我正在根据索引在这里创建一个新的。我的代码看起来像下面这样,利用 filter
函数按索引过滤字典。
testlist = ["0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"]
testdict = {}
to_add_end = "10"
for binary in testlist:
testdict[binary] = int(binary)
filtered_dict = dict(filter(lambda entry:entry[0][-len(to_add_end):] == to_add_end, testdict.items()))
print(sum(filtered_dict.values()))
我们传递给filter
的lambda函数:
lambda entry:entry[0][-len(to_add_end):] == to_add_end
它告诉过滤器只保留第一部分 [0]
的最后 n 个字母 [-len(to_add_end):]
也就是键匹配我们想要保留的结尾的元素。
要解决此问题,您可以使用切片表示法,它可以让您从右侧开始索引,以及列表理解。
从右边开始索引是这样的:
输入:
my_string = '1001'
my_string[-3:-1]
输出:
'00'
这是因为[-3:]从右边第三个位置开始索引,[:-1]索引到但不包括右边最后一个位置。
接下来,您想要对字典中键满足此条件的所有元素求和。您可以通过列表理解来做到这一点:
sum([counts[key] for key in counts.keys() if key[-3:-1] == '00'])
0.251953125
将其分解为以下步骤:
[counts[key] for key in counts.keys()]
这将创建一个新列表,其中包含原始列表的所有值。单独使用没有用。
但是通过添加条件:“if key[-3:-1] == '00'”,我们将列表过滤为仅具有右数第三个和右数第二个值,你所说的位置 2 和位置 1,都是'0'。
因此,新列表仅包含您选择的键的值,然后我们将这些值相加。
希望对您有所帮助!
您是否正在寻找这样的东西:
counts = {'0001': 0.0001220703125, '0010': 0.000244140625, '0100': 0.0003662109375, '0101': 0.245849609375, '0110': 0.2486572265625, '0111': 0.000244140625, '1000': 0.0009765625, '1001': 0.2508544921875, '1010': 0.252197265625, '1101': 0.00048828125, '0000': 0.0, '0011': 0.0, '1011': 0.0, '1100': 0.0, '1110': 0.0, '1111': 0.0}
def addcts(keystr, x, xv, y, yv):
if x > len(keystr) or y > len(keystr):
return False
if keystr[x] == str(xv) and keystr[y] == str(yv):
return True
return False
print(sum([kel[1] for kel in counts.items() if addcts(kel[0], 2, 1, 3, 0)])) # 1 at position 2 and 0 at position 3
结果是 0.5010986328125
(您要查找的结果)?
编辑:根据评论
的输入进行了更改
我正在寻找一种自动化流程的方法,我只在列表值的特定位置添加具有特定值的元素。我知道这听起来很复杂,但我试图在这个微不足道的例子中更好地解释自己: 我有所有这些索引:
["0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"]
我想对位置 x 为 0 或 1 且位置 y 为 0 或 1 的所有索引求和。在这种情况下,我想对它们在索引
中位置 1(从右起)的 0 和位置 0(从右起)的 1 的所有计数求和"01": counts["0001"] + counts["0101"] + counts["1001"] + counts["1101"]
为了更容易理解,在这种情况下,我对索引中位置 1(从右)为 1 和位置 0 为 0 的所有计数求和。
"10": counts["0010"] + counts["0110"] + counts["1010"] + counts["1110"]
我可以在 Python 中找到自动化来执行此操作吗?
编辑: 我会尝试更具体:
counts = {'0001': 0.0001220703125, '0010': 0.000244140625, '0100': 0.0003662109375, '0101': 0.245849609375, '0110': 0.2486572265625, '0111': 0.000244140625, '1000': 0.0009765625, '1001': 0.2508544921875, '1010': 0.252197265625, '1101': 0.00048828125, '0000': 0.0, '0011': 0.0, '1011': 0.0, '1100': 0.0, '1110': 0.0, '1111': 0.0}
例如,我需要的是获取中间为 00 的所有索引(位置 1 和 2)。所以我需要 select: '0001', '1000', '1001', '0000' 其中在位置 1 中包含 0,在位置 2 中包含 0。我想对所有这些值求和。 '1101'不好,因为按顺序包含,位置0为1,位置1为0,位置2为1,位置3为1.
我唯一知道的是我想要的值(它们是 2,可以取值 0 或 1)和它们的位置(即 0 或 1 或 2,或 3)。
我希望我说清楚了
我假设你的索引是字典。我正在根据索引在这里创建一个新的。我的代码看起来像下面这样,利用 filter
函数按索引过滤字典。
testlist = ["0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"]
testdict = {}
to_add_end = "10"
for binary in testlist:
testdict[binary] = int(binary)
filtered_dict = dict(filter(lambda entry:entry[0][-len(to_add_end):] == to_add_end, testdict.items()))
print(sum(filtered_dict.values()))
我们传递给filter
的lambda函数:
lambda entry:entry[0][-len(to_add_end):] == to_add_end
它告诉过滤器只保留第一部分 [0]
的最后 n 个字母 [-len(to_add_end):]
也就是键匹配我们想要保留的结尾的元素。
要解决此问题,您可以使用切片表示法,它可以让您从右侧开始索引,以及列表理解。
从右边开始索引是这样的:
输入:
my_string = '1001'
my_string[-3:-1]
输出:
'00'
这是因为[-3:]从右边第三个位置开始索引,[:-1]索引到但不包括右边最后一个位置。
接下来,您想要对字典中键满足此条件的所有元素求和。您可以通过列表理解来做到这一点:
sum([counts[key] for key in counts.keys() if key[-3:-1] == '00'])
0.251953125
将其分解为以下步骤:
[counts[key] for key in counts.keys()]
这将创建一个新列表,其中包含原始列表的所有值。单独使用没有用。
但是通过添加条件:“if key[-3:-1] == '00'”,我们将列表过滤为仅具有右数第三个和右数第二个值,你所说的位置 2 和位置 1,都是'0'。
因此,新列表仅包含您选择的键的值,然后我们将这些值相加。
希望对您有所帮助!
您是否正在寻找这样的东西:
counts = {'0001': 0.0001220703125, '0010': 0.000244140625, '0100': 0.0003662109375, '0101': 0.245849609375, '0110': 0.2486572265625, '0111': 0.000244140625, '1000': 0.0009765625, '1001': 0.2508544921875, '1010': 0.252197265625, '1101': 0.00048828125, '0000': 0.0, '0011': 0.0, '1011': 0.0, '1100': 0.0, '1110': 0.0, '1111': 0.0}
def addcts(keystr, x, xv, y, yv):
if x > len(keystr) or y > len(keystr):
return False
if keystr[x] == str(xv) and keystr[y] == str(yv):
return True
return False
print(sum([kel[1] for kel in counts.items() if addcts(kel[0], 2, 1, 3, 0)])) # 1 at position 2 and 0 at position 3
结果是 0.5010986328125
(您要查找的结果)?
编辑:根据评论
的输入进行了更改