- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个文本文件,其中包含如下数字列表:
1
2 5 3
3 5
4
5
每个数字都是树的一个节点。当一行中有多个数字时,表示第一个数字有以下数字链接。
1 后面没有任何数字,因此它没有链接任何数字。
2 与 3 和 5 相链接。
3 有 5 链接到它,并且它自己链接到 2。
4 没有任何与之关联的号码。
5 没有任何与之关联的数字,但它与 3 和 2 关联。
由于 2、3 和 5 连接在一起,它们形成一个组件。 1 和 4 没有链接,也没有链接到它们的数字,因此它们各自形成一个组件。
因此,总共有 3 个组件。
您如何确定组件的数量?我在 for 循环和条件方面遇到了困难。
def components(self):
elm = 0
with open('file.txt','r') as f:
for line in f:
comp = list(line)
for x in comp:
if comp[x] != comp[x+1]:
elm += 1
else:
pass
print(elm)
我尝试了上面的代码。但是,当我运行它时,我在函数执行中收到下一条消息:
components missing 1 required positional argument: 'self'
可能有必要提一下,我正在处理类(class),而且我对这件事几乎不陌生。
最佳答案
您正在使用 for-loops
以正确的方式解决此问题,但您似乎对 loop
所经历的内容感到有点困惑!如果我正确理解您想要实现的目标,我认为我已经编写了可以正常工作的代码。
使用名为 text
的 file.txt
文件,其内容为:
1
253
35
4
5
下面的代码将创建一个list
的components
,然后print
得出最后有多少个components
:
components = []
with open("file.txt", "r") as f:
for line in f:
line = [int(i) for i in line.strip()]
newComponent = True
for comp in components:
if not newComponent:
break
for ele in line:
if ele in comp:
comp += line
newComponent = False
break
components = [list(set(c)) for c in components]
if newComponent:
components.append(line)
print(len(components))
输出你想要的内容:
3
代码首先将 text
文件打开到 f
中。然后我们开始第一个 loop
,它将遍历 line
中的每个 file
。我们使用 line
上的 list
将这个 ints
转换为 list-comprehension
的 line.strip()
(.strip()
只是从末尾删除了 new-line
char
。
然后我们定义一个 bool
- newComponents
- 它被初始化为 True
因为我们假设这个 line
将没有 links
。
接下来,我们通过 loop
component
中的每个 list
进行 components
。我们在这里做的第一件事就是快速检查我们之前是否已经找到了该 component
对应的 line
。如果有,我们只需从 linked
中取出 break
即可。
否则,如果我们还不是 loop
,我们会遍历 linked
中的每个 element
并检查该 line
是否在我们当前 element
上的 component
中。如果是,我们将 looping
(使用 concatenate
)我们的 +
放到该 line
上,将 component
bool
newComponent
设置为 false(因为我们有一个链接)并从该 flag
中设置 break
因为我们找到了 loop
。
此后,link
行将简单地遍历组件并从每个链接中删除 components = [list(set(c)) for c in components]
。例如,如果 duplicates
链接到 3
并且我们之前刚刚将 2
和 3
添加到该 5
中,那么该 component
中现在将有 2
3s
- 重复。此行只是删除那些 component
。严格来说,这一行不是必需的,因为我们仍然会得到相同的结果,但我只是认为如果您稍后想使用 duplicates
,它会整理代码。
最后,如果没有找到 components
( links
仍然是 newComponent
),我们只需将整个 True
(因为它们是 line
)附加到 linked
components
中。
就是这样!我们对长度进行 list
,并在末尾添加 print()
,然后您就可以得到结果。
希望这对你有用!
如果len()
的内容是多位数字,可以用file.txt
分隔:
11
2 45
45 67
8
91
那么我们所要做的就是在 space
的末尾添加一个 .split()
:
components = []
with open("file.txt", "r") as f:
for line in f:
line = [int(i) for i in line.strip().split(' ')]
...
它的作用是获取 list-comprehension
的 string
,而不是通过 line
中的每个 looping
进行 char
,我们从每个 string
处的 list
和 splitting
处的 string
生成一个 space
。为了证明这一点:
"123 456 789".split(" ")
给出:
["123", "456", "789"]
关于Python-读取文件并计算重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46629090/
我想知道如何考虑需要您做出某些选择才能看到最终结果的搜索系统。我说的是 select 表单,您可以在其中根据您的选择继续操作,然后您会看到结果。 下面描述了我正在谈论的一个随机示例。想象一下 Init
您好,我目前正在编写一些软件来管理我们的库存。我搜索了 2 个表 master_stock(保存每一个股票代码和描述)库存(保存库存代码、地点、数量...) 一切都很好,但这是我遇到的问题。 假设我的
我有 2 个表,我想合并其数据。id 是我的关键字段(增量且不同)。表1和表2字段说明例如:id - 名称 - 值 我想将表2的所有数据插入表1,它们有不同的数据,但在某些行中有相同的id。 所以当我
我正在努力解决汇编中的一个问题,我必须获取十六进制代码的第一个字节 (FF) 并将其复制到整个值中: 0x045893FF input 0xFFFFFFFF output 我所做的
我有 Eclipse Indigo 版本,我可以在其中运行 Java 和 C++ 项目。 但我只想使用另一个 Eclipse 来编写 C++ 项目。所以我将 eclipse(不是工作区)的源文件夹复制
This question already has answers here: What is a NullPointerException, and how do I fix it? (12个答案)
This question already has answers here: Numbering rows within groups in a data frame (8个答案) 5个月前关闭。
我知道用q记录到寄存器中,但我想知道是否可以设置一些东西来快速调用最后一个记录,就像一样。 回顾最后一个简短的编辑命令(有关 的讨论请参阅 here。)。 我知道@@,但它似乎只有在执行@z之后才起作
来自 Eclipse 并且一直习惯于复制行,发现 Xcode 没有这样的功能是很奇怪的。或者是吗? 我知道可以更改系统范围的键绑定(bind),但这不是我想要的。 最佳答案 要删除一行:Ctrl-A
假设我有一个包含元素的列表,例如[1,2,3,4,5,6,7,8]。我想创建长度为 N 的该元素的所有排列。 因此,对于N = 4,它将是[[1,1,1,1],[1,1,1,2],[1,1,2,1],
我有一个带有 JMenu 的 JFrame。当我在某些情况下添加包含图像的 JPanel 时,程序首次启动时菜单会重复。调整大小时重复的菜单消失。任何建议都非常感激。谢谢。代码如下: public c
我正在尝试查找目录中文件的重复项。 我对这个 block 有一个问题,它以文件地址作为参数: public void findFiles(ArrayList list){ HashMap hm
我知道这个问题已经发布并且已经给出了答案,但我的情况不同,因为我在单个方法上填充多个下拉列表,所以如果我点击此链接 After every postback dropdownlist items re
我正在尝试为我的日历应用程序实现重复模式。我希望它的工作方式与 Outlook 在您设置重复约会时的工作方式相同。 public async Task> ApplyReccurrencePeriod
我有一个利用 cookie 来支持准向导的应用程序(即,它是一组相互导航的页面,它们必须以特定顺序出现以进行注册)。 加载 Logon.aspx 页面时 - 默认页面 - 浏览器 cookie 看起来
我有 3 个输入,代码检查它们是否为空,如果为空,则将变量值添加到输入中。 所以我有 3 个具有值的变量: var input1text = "something here"; var input2t
根据数组的长度更改数组的每个元素的最佳方法是什么? 例如: User #1 input = "XYZVC" Expected Output = "BLABL" User #2 input = "XYZ
我在让 Algolia 正常工作时遇到了一些麻烦。我正在使用 NodeJS 并尝试在我的数据库和 Algolia 之间进行一些同步,但由于某种原因似乎随机弹出大量重复项。 如您所见,在某些情况下,会弹
遵循以下规则: expr: '(' expr ')' #exprExpr | expr ( AND expr )+ #exprAnd | expr ( OR expr )+ #exprO
我有一个布局,我想从左边进入并停留几秒钟,然后我希望它从右边离开。为此,我编写了以下代码: 这里我在布局中设置数据: private void loadDoctor(int doctorsInTheL
我是一名优秀的程序员,十分优秀!