<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Martin Stoffel</title><link>https://www.mstoffel.xyz/</link><description>Recent content on Martin Stoffel</description><generator>Hugo</generator><language>en</language><lastBuildDate>Thu, 17 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://www.mstoffel.xyz/index.xml" rel="self" type="application/rss+xml"/><item><title>engineered-DNA forensics</title><link>https://www.mstoffel.xyz/posts/gea/</link><pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/posts/gea/</guid><description>&lt;p&gt;Engineered organisms (bio-agents) are created in labs around the world. Lab-leaks are &lt;a href="https://www.sciencedirect.com/science/article/pii/S2666524723003191?utm_source=chatgpt.com"&gt;relatively common&lt;/a&gt;, even out of &lt;a href="#x-bsl4" class="nut"&gt;BSL-4&lt;/a&gt; labs. Bad actors, including nation states and terror groups have always had a large &lt;a href="https://www.mstoffel.xyz/posts/dacc-bio/"&gt;interest in bioweapons&lt;/a&gt;. However, once a bio-agent is out in the wild, it&amp;rsquo;s really difficult to figure out &lt;em&gt;who&lt;/em&gt; developed it in the first place.&lt;/p&gt;&#10;&lt;p&gt;The problem is called &lt;strong&gt;genetic engineering attribution (GEA)&lt;/strong&gt;. The challenge of GEA is tracing back engineered organisms to their designers through signatures in their DNA.&lt;/p&gt;</description></item><item><title>free science</title><link>https://www.mstoffel.xyz/posts/smcp/</link><pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/posts/smcp/</guid><description>&lt;p&gt;At first, AIs were created to understand the world. Now, a world is created that AIs can understand better.&lt;/p&gt;&#10;&lt;p&gt;The &lt;a href="https://modelcontextprotocol.io/introduction"&gt;Model Context Protocol (MCP)&lt;/a&gt; defines a standardised interface between &lt;em&gt;things&lt;/em&gt; and AI. Until MCP, LLMs like ChatGPT or Claude had to figure out where to look for data, how to use an application, or how to navigate a website. This often goes wrong, because apps are all different, and data is often not accessible.&lt;/p&gt;</description></item><item><title>d/acc bio</title><link>https://www.mstoffel.xyz/posts/dacc-bio/</link><pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/posts/dacc-bio/</guid><description>&lt;p&gt;Biological laboratories are &lt;a href="https://en.wikipedia.org/wiki/List_of_laboratory_biosecurity_incidents"&gt;less safe&lt;/a&gt; than one might think. Looking at &lt;a href="https://www.thelancet.com/journals/lanmic/article/PIIS2666-5247%2823%2900319-1/fulltext"&gt;known incidents between 2000 and 2021&lt;/a&gt; roughly every couple of weeks a lab worker accidentally gets infected, and roughly once a year, a pathogen escapes the lab. These are only reported accidents, likely to be an underestimate.&lt;/p&gt;&#10;&lt;p&gt;Some of them are hard to believe. The only human infectious disease that we ever managed to eradicate is smallpox, caused by the variola virus. Since its eradication in 1980, there should just be two high-security stashes of it worldwide, one in the US and one in Russia. Yet, a &lt;a href="https://www.fda.gov/media/101811/download"&gt;third stash was discovered in 2014&lt;/a&gt;, in a six decade old cardboard box in an unsecured storage room on the NIH campus. Just a year later, the Pentagon accidentally sent &lt;a href="https://www.independent.co.uk/news/world/americas/deadly-anthrax-samples-mistakenly-sent-out-to-nine-states-and-a-base-in-south-korea-by-us-military-laboratory-10280211.html"&gt;live Anthrax samples&lt;/a&gt; to various places, including South Korea.&lt;/p&gt;</description></item><item><title>hidden info</title><link>https://www.mstoffel.xyz/posts/info/</link><pubDate>Wed, 05 Apr 2023 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/posts/info/</guid><description>&lt;p&gt;&amp;ldquo;If I am what I have and if what I have is lost, then who am I?&amp;rdquo;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;Erich Fromm&lt;/em&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The future of knowledge is at a crossroads. Before long, most text and code will be written by or with AI models. What was once explicit human reasoning will become information hidden in neural network weights, undecipherable changes in evergrowing matrices. Model outputs will soon become inputs, and the trajectory of knowledge becomes unclear once we outsourced thinking to the machine.&lt;/p&gt;</description></item><item><title>piping python</title><link>https://www.mstoffel.xyz/posts/piping/</link><pubDate>Sat, 11 Feb 2023 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/posts/piping/</guid><description>&lt;p&gt;Data wrangling in Python &lt;em&gt;seems&lt;/em&gt; clunky.&#10;Yet, it doesn&amp;rsquo;t have to be. Here is &lt;strong&gt;how to pipe in Python.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;&#10;&lt;p&gt;In &lt;code&gt;R&lt;/code&gt;, we process data beautifully with &lt;code&gt;dplyr&lt;/code&gt; and &lt;code&gt;%&amp;gt;%&lt;/code&gt;:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-r" data-lang="r"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;suppressMessages&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;library&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;dplyr&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iris &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;mutate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;sepal_ratio &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; Sepal.Width &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; Sepal.Length&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;filter&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;sepal_ratio &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0.5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;select&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;Species&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; sepal_ratio&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;group_by&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;Species&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&amp;gt;%&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;summarise&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;mean_sepal_ratio &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;mean&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;sepal_ratio&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In Python&amp;rsquo;s &lt;code&gt;pandas&lt;/code&gt;, most data wrangling code looks much less great, often like this:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;pandas&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; &lt;span style="color:#24292e"&gt;pd&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;url &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iris &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; pd&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;read_csv&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;url&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iris&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;sepal_ratio&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; iris&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;sepal_width&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; iris&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;sepal_length&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iris &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; iris&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;iris&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;sepal_ratio&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0.5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#57606a"&gt;#filter&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iris &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; iris&lt;span style="color:#1f2328"&gt;[[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;species&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;sepal_ratio&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]]&lt;/span&gt; &lt;span style="color:#57606a"&gt;#select&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iris &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; iris&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;groupby&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;species&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#57606a"&gt;#group by&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;iris &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; iris&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;agg&lt;span style="color:#1f2328"&gt;({&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;sepal_ratio&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;mean&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;})&lt;/span&gt; &lt;span style="color:#57606a"&gt;#summarise&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is hard to read because there&amp;rsquo;s lots of repitition.&lt;/p&gt;</description></item><item><title>gg themes</title><link>https://www.mstoffel.xyz/posts/theme/</link><pubDate>Thu, 10 Nov 2022 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/posts/theme/</guid><description>&lt;p&gt;&lt;a href="https://ggplot2.tidyverse.org/"&gt;ggplot2&lt;/a&gt; has become one of the most powerful and flexible visualisation tools, with a large community and lots of people working on new extensions every day. A large number of &lt;a href="https://www.r-graph-gallery.com/"&gt;ways to represent data&lt;/a&gt; makes it possible to create nearly anything in &lt;code&gt;ggplot2&lt;/code&gt;, from great &lt;a href="https://bbc.github.io/rcookbook/"&gt;data journalism&lt;/a&gt; to &lt;a href="https://www.cedricscherer.com/top/dataviz/"&gt;beautiful infographics&lt;/a&gt; and &lt;a href="https://www.data-imaginist.com/art"&gt;generative art&lt;/a&gt;. No post-processing required anymore.&lt;/p&gt;&#10;&lt;p&gt;The general look of a ggplot is controlled by a &lt;strong&gt;theme&lt;/strong&gt;. Anyone using ggplot knows that the default grey theme is usually not what you want to show the world. Modifying themes is very flexible, but a little bit complicated. Even after using it for years, I have to google some things every single time. Creating your own theme is a way to give your plots a consistent and personal design, and will save you a lot of time and many lines of code.&lt;/p&gt;</description></item><item><title>map()-magic</title><link>https://www.mstoffel.xyz/posts/map/</link><pubDate>Sun, 09 Jan 2022 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/posts/map/</guid><description>&lt;p&gt;&amp;ldquo;Form follows function&amp;rdquo; - &lt;em&gt;Louis Sullivan&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;One of the major steps in becoming a more effective R programmer for me was to really adopt functional programming. It made my code more readable, less error-prone, faster, and also simply for fun to write.&lt;/p&gt;&#10;&lt;p&gt;Functional programming is simply about writing code with functions. Instead of repeating the same line of code over and over or using double-nested for loops, we can abstract the essence of what we are doing into functions.&lt;/p&gt;</description></item><item><title>about</title><link>https://www.mstoffel.xyz/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/about/</guid><description>&lt;p&gt;I&amp;rsquo;m Martin, an independent researcher. At the moment I&amp;rsquo;m thinking about the intersection of AI safety and biology funded by an Open Philantropy grant, while building AI agents for a small company on the side. Previously, I led the development of &lt;a href="https://github.com/alan-turing-institute/autoemulate"&gt;AutoEmulate&lt;/a&gt;, an open-source package to emulate physics simulations using machine learning at the Turing Institute; explored parallels between cultural evolution and AI progress as a &lt;a href="https://pibbss.ai/"&gt;PIBBSS fellow&lt;/a&gt;; studied &lt;a href="https://www.nature.com/articles/s41467-021-23222-9"&gt;deleterious&lt;/a&gt; &lt;a href="https://academic.oup.com/evlett/article/5/3/187/6697630"&gt;mutations&lt;/a&gt; in a bronze-age island sheep population; discovered genetic traces of the 19th century overhunting in &lt;a href="https://www.nature.com/articles/s41467-018-06695-z"&gt;pinniped populations&lt;/a&gt; around the world, consulted on whether &lt;a href="https://royalsocietypublishing.org/doi/full/10.1098/rspb.2022.0487"&gt;racehorse breeding&lt;/a&gt; actually works, and built &lt;a href="https://besjournals.onlinelibrary.wiley.com/doi/full/10.1111/2041-210X.12797"&gt;scientific&lt;/a&gt; &lt;a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0198311"&gt;open&lt;/a&gt; &lt;a href="https://peerj.com/articles/11414/"&gt;source&lt;/a&gt; &lt;a href="https://besjournals.onlinelibrary.wiley.com/doi/full/10.1111/2041-210X.12588"&gt;software&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>projects</title><link>https://www.mstoffel.xyz/projects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/projects/</guid><description/></item><item><title>Python</title><link>https://www.mstoffel.xyz/notes/python.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.mstoffel.xyz/notes/python.html</guid><description>&lt;p&gt;A run through the &lt;a href="https://docs.python.org/3/tutorial/index.html#tutorial-index"&gt;Python Tutorial&lt;/a&gt;, focusing on things less familiar.&lt;/p&gt;&#10;&lt;h3 id="calculating"&gt;calculating&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# floor division&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;15&lt;/span&gt; &lt;span style="color:#0550ae"&gt;//&lt;/span&gt; &lt;span style="color:#0550ae"&gt;6&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# modulo&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;15&lt;/span&gt; &lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#0550ae"&gt;6&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;2&#10;3&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="text"&gt;text&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;escaping: &lt;code&gt;'doesn\'t'&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;print()&lt;/code&gt; interpretes special characters, e.g. &lt;code&gt;\n&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# auto concat&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;Gen&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;etics&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;txt &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;Gen&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;etics&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;txt&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;Genetics&#10;Genetics&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;s[:i] + s[i:]&lt;/code&gt; is always equal to &lt;code&gt;s&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;slice indices point &lt;em&gt;between&lt;/em&gt; characters&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;!-- --&gt;&#10;&lt;pre&gt;&lt;code&gt;+---+---+---+---+---+---+&#10; | P | y | t | h | o | n |&#10; +---+---+---+---+---+---+&#10; 0 1 2 3 4 5 6&#10;-6 -5 -4 -3 -2 -1&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# out of range slicing is handled&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;word &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;tree&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; word&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1123234&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;'ree'&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="lists"&gt;lists&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;lists, like strings are &lt;a href="https://docs.python.org/3/glossary.html#term-sequence"&gt;sequence&lt;/a&gt; types - they can do slicing, len etc.&lt;/li&gt;&#10;&lt;li&gt;unlike strings, they are mutable&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ltrs &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;d&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;e&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# remove elements &lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ltrs&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ltrs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;['a', 'd', 'e']&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;h3 id="programming-basics"&gt;programming basics&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;any non-zero integer is true, zero is false&lt;/li&gt;&#10;&lt;li&gt;any sequence with with non-zero length is true, empty sequences are false&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="control-flows"&gt;control flows&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;pointing to the same list&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;l1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;l2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; l1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;l2&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;z&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;print&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;l1&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre&gt;&lt;code&gt;['a', 'z', 'c']&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;when modifiying a colleciton, it&amp;rsquo;s good to use a &lt;em&gt;copy&lt;/em&gt; or create a &lt;em&gt;new&lt;/em&gt; collection&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pkm &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;pikachu&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;yellow&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;snorlax&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;grey-blue&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;scyther&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;green&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# copy&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;for&lt;/span&gt; pk&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; col &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; pkm&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;copy&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;items&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; pk &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;yellow&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;del&lt;/span&gt; pkm&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;pk&lt;span style="color:#1f2328"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;copys&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;copys can be &lt;strong&gt;shallow&lt;/strong&gt; or &lt;strong&gt;deep&lt;/strong&gt;, the difference only matters for compound objects. A shallow copy creates a new compound object, and then inserts &lt;em&gt;references&lt;/em&gt; to the objects found in the original. A deep copy creates a new compound object, and then recursively insert copies of the objects found in the original. The latter is best done using &lt;code&gt;deepcopy()&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/blockquote&gt;</description></item></channel></rss>